{-# LANGUAGE Trustworthy #-}{-# LANGUAGE NoImplicitPrelude #-}{-# LANGUAGE PolyKinds #-}------------------------------------------------------------------------------- |-- Module : Data.Proxy-- License : BSD-style (see the LICENSE file in the distribution)---- Maintainer : libraries@haskell.org-- Stability : experimental-- Portability : portable---- Definition of a Proxy type (poly-kinded in GHC)---- @since 4.7.0.0-----------------------------------------------------------------------------moduleData.Proxy(Proxy (..),asProxyTypeOf ,KProxy (..))whereimportGHC.Base importGHC.Show importGHC.Read importGHC.Enum importGHC.Arr -- $setup-- >>> import Data.Void-- >>> import Prelude-- | 'Proxy' is a type that holds no data, but has a phantom parameter of-- arbitrary type (or even kind). Its use is to provide type information, even-- though there is no value available of that type (or it may be too costly to-- create one).---- Historically, @'Proxy' :: 'Proxy' a@ is a safer alternative to the-- @'undefined' :: a@ idiom.---- >>> Proxy :: Proxy (Void, Int -> Int)-- Proxy---- Proxy can even hold types of higher kinds,---- >>> Proxy :: Proxy Either-- Proxy---- >>> Proxy :: Proxy Functor-- Proxy---- >>> Proxy :: Proxy complicatedStructure-- ProxydataProxy t =Proxy deriving(Bounded -- ^ @since 4.7.0.0,Read -- ^ @since 4.7.0.0)-- | A concrete, promotable proxy type, for use at the kind level.-- There are no instances for this because it is intended at the kind level onlydataKProxy (t ::Type)=KProxy -- It's common to use (undefined :: Proxy t) and (Proxy :: Proxy t)-- interchangeably, so all of these instances are hand-written to be-- lazy in Proxy arguments.-- | @since 4.7.0.0instanceEq(Proxy s )where_== :: Proxy s -> Proxy s -> Bool
==_=Bool
True-- | @since 4.7.0.0instanceOrd(Proxy s )wherecompare :: Proxy s -> Proxy s -> Ordering
compare__=Ordering
EQ-- | @since 4.7.0.0instanceShow (Proxy s )whereshowsPrec :: Int -> Proxy s -> ShowS
showsPrec __=String -> ShowS
showString "Proxy"-- | @since 4.7.0.0instanceEnum (Proxy s )wheresucc :: Proxy s -> Proxy s
succ _=String -> Proxy s
forall a. String -> a
errorWithoutStackTrace "Proxy.succ"pred :: Proxy s -> Proxy s
pred _=String -> Proxy s
forall a. String -> a
errorWithoutStackTrace "Proxy.pred"fromEnum :: Proxy s -> Int
fromEnum _=0toEnum :: Int -> Proxy s
toEnum 0=Proxy s
forall k (t :: k). Proxy t
Proxy toEnum _=String -> Proxy s
forall a. String -> a
errorWithoutStackTrace "Proxy.toEnum: 0 expected"enumFrom :: Proxy s -> [Proxy s]
enumFrom _=[Proxy s
forall k (t :: k). Proxy t
Proxy ]enumFromThen :: Proxy s -> Proxy s -> [Proxy s]
enumFromThen __=[Proxy s
forall k (t :: k). Proxy t
Proxy ]enumFromThenTo :: Proxy s -> Proxy s -> Proxy s -> [Proxy s]
enumFromThenTo ___=[Proxy s
forall k (t :: k). Proxy t
Proxy ]enumFromTo :: Proxy s -> Proxy s -> [Proxy s]
enumFromTo __=[Proxy s
forall k (t :: k). Proxy t
Proxy ]-- | @since 4.7.0.0instanceIx (Proxy s )whererange :: (Proxy s, Proxy s) -> [Proxy s]
range _=[Proxy s
forall k (t :: k). Proxy t
Proxy ]index :: (Proxy s, Proxy s) -> Proxy s -> Int
index __=0inRange :: (Proxy s, Proxy s) -> Proxy s -> Bool
inRange __=Bool
TruerangeSize :: (Proxy s, Proxy s) -> Int
rangeSize _=1unsafeIndex :: (Proxy s, Proxy s) -> Proxy s -> Int
unsafeIndex __=0unsafeRangeSize :: (Proxy s, Proxy s) -> Int
unsafeRangeSize _=1-- | @since 4.9.0.0instanceSemigroup (Proxy s )where_<> :: Proxy s -> Proxy s -> Proxy s
<> _=Proxy s
forall k (t :: k). Proxy t
Proxy sconcat :: NonEmpty (Proxy s) -> Proxy s
sconcat _=Proxy s
forall k (t :: k). Proxy t
Proxy stimes :: b -> Proxy s -> Proxy s
stimes __=Proxy s
forall k (t :: k). Proxy t
Proxy -- | @since 4.7.0.0instanceMonoid (Proxy s )wheremempty :: Proxy s
mempty =Proxy s
forall k (t :: k). Proxy t
Proxy mconcat :: [Proxy s] -> Proxy s
mconcat _=Proxy s
forall k (t :: k). Proxy t
Proxy -- | @since 4.7.0.0instanceFunctor Proxy wherefmap :: (a -> b) -> Proxy a -> Proxy b
fmap __=Proxy b
forall k (t :: k). Proxy t
Proxy {-# INLINEfmap #-}-- | @since 4.7.0.0instanceApplicative Proxy wherepure :: a -> Proxy a
pure _=Proxy a
forall k (t :: k). Proxy t
Proxy {-# INLINEpure #-}_<*> :: Proxy (a -> b) -> Proxy a -> Proxy b
<*> _=Proxy b
forall k (t :: k). Proxy t
Proxy {-# INLINE(<*>)#-}-- | @since 4.9.0.0instanceAlternative Proxy whereempty :: Proxy a
empty =Proxy a
forall k (t :: k). Proxy t
Proxy {-# INLINEempty #-}_<|> :: Proxy a -> Proxy a -> Proxy a
<|> _=Proxy a
forall k (t :: k). Proxy t
Proxy {-# INLINE(<|>)#-}-- | @since 4.7.0.0instanceMonad Proxy where_>>= :: Proxy a -> (a -> Proxy b) -> Proxy b
>>= _=Proxy b
forall k (t :: k). Proxy t
Proxy {-# INLINE(>>=)#-}-- | @since 4.9.0.0instanceMonadPlus Proxy -- | 'asProxyTypeOf' is a type-restricted version of 'const'.-- It is usually used as an infix operator, and its typing forces its first-- argument (which is usually overloaded) to have the same type as the tag-- of the second.---- >>> import Data.Word-- >>> :type asProxyTypeOf 123 (Proxy :: Proxy Word8)-- asProxyTypeOf 123 (Proxy :: Proxy Word8) :: Word8---- Note the lower-case @proxy@ in the definition. This allows any type-- constructor with just one argument to be passed to the function, for example-- we could also write---- >>> import Data.Word-- >>> :type asProxyTypeOf 123 (Just (undefined :: Word8))-- asProxyTypeOf 123 (Just (undefined :: Word8)) :: Word8asProxyTypeOf ::a ->proxy a ->a asProxyTypeOf :: a -> proxy a -> a
asProxyTypeOf =a -> proxy a -> a
forall a b. a -> b -> a
const {-# INLINEasProxyTypeOf #-}

AltStyle によって変換されたページ (->オリジナル) /