Data.Proxy

base-4.11.0.0: Basic libraries

License | BSD-style (see the LICENSE file in the distribution)
Maintainer | libraries@haskell.org
Stability | experimental
Portability | portable
Safe Haskell | Trustworthy
Language | Haskell2010

Data.Proxy

Description

Definition of a Proxy type (poly-kinded in GHC)

Since: 4.7.0.0

Synopsis

- data Proxy t = Proxy
- asProxyTypeOf :: a -> proxy a -> a
- data KProxy (t :: *) = KProxy

# Documentation

data Proxy t Source #

`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
    Proxy

Constructors

Proxy |

Instances

Generic1 (Proxy :: k -> *) Source # |
Instance details Associated Types type Rep1 Proxy :: k -> * Source # Methods from1 :: Proxy a -> Rep1 Proxy a Source # to1 :: Rep1 Proxy a -> Proxy a Source #
Monad (Proxy :: * -> *) Source # | Since: 4.7.0.0
Instance details Methods (>>=) :: Proxy a -> (a -> Proxy b) -> Proxy b Source # (>>) :: Proxy a -> Proxy b -> Proxy b Source # return :: a -> Proxy a Source # fail :: String -> Proxy a Source #
Functor (Proxy :: * -> *) Source # | Since: 4.7.0.0
Instance details Methods fmap :: (a -> b) -> Proxy a -> Proxy b Source # (<$) :: a -> Proxy b -> Proxy a Source #
Applicative (Proxy :: * -> *) Source # | Since: 4.7.0.0
Instance details Methods pure :: a -> Proxy a Source # (<*>) :: Proxy (a -> b) -> Proxy a -> Proxy b Source # liftA2 :: (a -> b -> c) -> Proxy a -> Proxy b -> Proxy c Source # (*>) :: Proxy a -> Proxy b -> Proxy b Source # (<*) :: Proxy a -> Proxy b -> Proxy a Source #
Foldable (Proxy :: * -> *) Source # | Since: 4.7.0.0
Instance details Methods fold :: Monoid m => Proxy m -> m Source # foldMap :: Monoid m => (a -> m) -> Proxy a -> m Source # foldr :: (a -> b -> b) -> b -> Proxy a -> b Source # foldr' :: (a -> b -> b) -> b -> Proxy a -> b Source # foldl :: (b -> a -> b) -> b -> Proxy a -> b Source # foldl' :: (b -> a -> b) -> b -> Proxy a -> b Source # foldr1 :: (a -> a -> a) -> Proxy a -> a Source # foldl1 :: (a -> a -> a) -> Proxy a -> a Source # toList :: Proxy a -> [a] Source # null :: Proxy a -> Bool Source # length :: Proxy a -> Int Source # elem :: Eq a => a -> Proxy a -> Bool Source # maximum :: Ord a => Proxy a -> a Source # minimum :: Ord a => Proxy a -> a Source # sum :: Num a => Proxy a -> a Source # product :: Num a => Proxy a -> a Source #
Traversable (Proxy :: * -> *) Source # | Since: 4.7.0.0
Instance details Methods traverse :: Applicative f => (a -> f b) -> Proxy a -> f (Proxy b) Source # sequenceA :: Applicative f => Proxy (f a) -> f (Proxy a) Source # mapM :: Monad m => (a -> m b) -> Proxy a -> m (Proxy b) Source # sequence :: Monad m => Proxy (m a) -> m (Proxy a) Source #
MonadPlus (Proxy :: * -> *) Source # | Since: 4.9.0.0
Instance details Methods mzero :: Proxy a Source # mplus :: Proxy a -> Proxy a -> Proxy a Source #
Alternative (Proxy :: * -> *) Source # | Since: 4.9.0.0
Instance details Methods empty :: Proxy a Source # (<|>) :: Proxy a -> Proxy a -> Proxy a Source # some :: Proxy a -> Proxy [a] Source # many :: Proxy a -> Proxy [a] Source #
MonadZip (Proxy :: * -> *) Source # | Since: 4.9.0.0
Instance details Methods mzip :: Proxy a -> Proxy b -> Proxy (a, b) Source # mzipWith :: (a -> b -> c) -> Proxy a -> Proxy b -> Proxy c Source # munzip :: Proxy (a, b) -> (Proxy a, Proxy b) Source #
Show1 (Proxy :: * -> *) Source # | Since: 4.9.0.0
Instance details Methods liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Proxy a -> ShowS Source # liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Proxy a] -> ShowS Source #
Read1 (Proxy :: * -> *) Source # | Since: 4.9.0.0
Instance details Methods liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Proxy a) Source # liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [Proxy a] Source # liftReadPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec (Proxy a) Source # liftReadListPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec [Proxy a] Source #
Ord1 (Proxy :: * -> *) Source # | Since: 4.9.0.0
Instance details Methods liftCompare :: (a -> b -> Ordering) -> Proxy a -> Proxy b -> Ordering Source #
Eq1 (Proxy :: * -> *) Source # | Since: 4.9.0.0
Instance details Methods liftEq :: (a -> b -> Bool) -> Proxy a -> Proxy b -> Bool Source #
Bounded (Proxy t) Source # |
Instance details Methods minBound :: Proxy t Source # maxBound :: Proxy t Source #
Enum (Proxy s) Source # | Since: 4.7.0.0
Instance details Methods succ :: Proxy s -> Proxy s Source # pred :: Proxy s -> Proxy s Source # toEnum :: Int -> Proxy s Source # fromEnum :: Proxy s -> Int Source # enumFrom :: Proxy s -> [Proxy s] Source # enumFromThen :: Proxy s -> Proxy s -> [Proxy s] Source # enumFromTo :: Proxy s -> Proxy s -> [Proxy s] Source # enumFromThenTo :: Proxy s -> Proxy s -> Proxy s -> [Proxy s] Source #
Eq (Proxy s) Source # | Since: 4.7.0.0
Instance details Methods (==) :: Proxy s -> Proxy s -> Bool Source # (/=) :: Proxy s -> Proxy s -> Bool Source #
Data t => Data (Proxy t) Source # | Since: 4.7.0.0
Instance details Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Proxy t -> c (Proxy t) Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Proxy t) Source # toConstr :: Proxy t -> Constr Source # dataTypeOf :: Proxy t -> DataType Source # dataCast1 :: Typeable t0 => (forall d. Data d => c (t0 d)) -> Maybe (c (Proxy t)) Source # dataCast2 :: Typeable t0 => (forall d e. (Data d, Data e) => c (t0 d e)) -> Maybe (c (Proxy t)) Source # gmapT :: (forall b. Data b => b -> b) -> Proxy t -> Proxy t Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Proxy t -> r Source # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Proxy t -> r Source # gmapQ :: (forall d. Data d => d -> u) -> Proxy t -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> Proxy t -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Proxy t -> m (Proxy t) Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Proxy t -> m (Proxy t) Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Proxy t -> m (Proxy t) Source #
Ord (Proxy s) Source # | Since: 4.7.0.0
Instance details Methods compare :: Proxy s -> Proxy s -> Ordering Source # (<) :: Proxy s -> Proxy s -> Bool Source # (<=) :: Proxy s -> Proxy s -> Bool Source # (>) :: Proxy s -> Proxy s -> Bool Source # (>=) :: Proxy s -> Proxy s -> Bool Source # max :: Proxy s -> Proxy s -> Proxy s Source # min :: Proxy s -> Proxy s -> Proxy s Source #
Read (Proxy t) Source # | Since: 4.7.0.0
Instance details Methods readsPrec :: Int -> ReadS (Proxy t) Source # readList :: ReadS [Proxy t] Source # readPrec :: ReadPrec (Proxy t) Source # readListPrec :: ReadPrec [Proxy t] Source #
Show (Proxy s) Source # | Since: 4.7.0.0
Instance details Methods showsPrec :: Int -> Proxy s -> ShowS Source # show :: Proxy s -> String Source # showList :: [Proxy s] -> ShowS Source #
Ix (Proxy s) Source # | Since: 4.7.0.0
Instance details Methods range :: (Proxy s, Proxy s) -> [Proxy s] Source # index :: (Proxy s, Proxy s) -> Proxy s -> Int Source # unsafeIndex :: (Proxy s, Proxy s) -> Proxy s -> Int inRange :: (Proxy s, Proxy s) -> Proxy s -> Bool Source # rangeSize :: (Proxy s, Proxy s) -> Int Source # unsafeRangeSize :: (Proxy s, Proxy s) -> Int
Generic (Proxy t) Source # |
Instance details Associated Types type Rep (Proxy t) :: * -> * Source # Methods from :: Proxy t -> Rep (Proxy t) x Source # to :: Rep (Proxy t) x -> Proxy t Source #
Semigroup (Proxy s) Source # | Since: 4.9.0.0
Instance details Methods (<>) :: Proxy s -> Proxy s -> Proxy s Source # sconcat :: NonEmpty (Proxy s) -> Proxy s Source # stimes :: Integral b => b -> Proxy s -> Proxy s Source #
Monoid (Proxy s) Source # | Since: 4.7.0.0
Instance details Methods mempty :: Proxy s Source # mappend :: Proxy s -> Proxy s -> Proxy s Source # mconcat :: [Proxy s] -> Proxy s Source #
type Rep1 (Proxy :: k -> *) Source # |
Instance details type Rep1 (Proxy :: k -> *) = D1 (MetaData "Proxy" "Data.Proxy" "base" False) (C1 (MetaCons "Proxy" PrefixI False) (U1 :: k -> *))
type Rep (Proxy t) Source # |
Instance details type Rep (Proxy t) = D1 (MetaData "Proxy" "Data.Proxy" "base" False) (C1 (MetaCons "Proxy" PrefixI False) (U1 :: * -> *))

asProxyTypeOf :: a -> proxy a -> a Source #

`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)) :: Word8

data KProxy (t :: *) Source #

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 only

Constructors

KProxy |