| 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
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, is a safer alternative to theProxy ::Proxy a'undefined :: a' idiom.
>>>Proxy :: Proxy (Void, Int -> Int)Proxy
Proxy can even hold types of higher kinds,
>>>Proxy :: Proxy EitherProxy
>>>Proxy :: Proxy FunctorProxy
>>>Proxy :: Proxy complicatedStructureProxy
Constructors
| Proxy |
| Generic1 (Proxy :: k ->Type)Source# | |
| Monad (Proxy ::Type ->Type)Source# | Since: 4.7.0.0 |
| Functor (Proxy ::Type ->Type)Source# | Since: 4.7.0.0 |
| Applicative (Proxy ::Type ->Type)Source# | Since: 4.7.0.0 |
| Foldable (Proxy ::Type ->Type)Source# | Since: 4.7.0.0 |
Instance detailsDefined inData.Foldable Methods fold ::Monoid m =>Proxy m -> mSource# foldMap ::Monoid m => (a -> m) ->Proxy a -> mSource# foldr :: (a -> b -> b) -> b ->Proxy a -> bSource# foldr' :: (a -> b -> b) -> b ->Proxy a -> bSource# foldl :: (b -> a -> b) -> b ->Proxy a -> bSource# foldl' :: (b -> a -> b) -> b ->Proxy a -> bSource# foldr1 :: (a -> a -> a) ->Proxy a -> aSource# foldl1 :: (a -> a -> a) ->Proxy a -> aSource# toList ::Proxy a -> [a]Source# elem ::Eq a => a ->Proxy a ->BoolSource# maximum ::Ord a =>Proxy a -> aSource# minimum ::Ord a =>Proxy a -> aSource# | |
| Traversable (Proxy ::Type ->Type)Source# | Since: 4.7.0.0 |
| MonadPlus (Proxy ::Type ->Type)Source# | Since: 4.9.0.0 |
| Alternative (Proxy ::Type ->Type)Source# | Since: 4.9.0.0 |
| MonadZip (Proxy ::Type ->Type)Source# | Since: 4.9.0.0 |
| Show1 (Proxy ::Type ->Type)Source# | Since: 4.9.0.0 |
| Read1 (Proxy ::Type ->Type)Source# | Since: 4.9.0.0 |
Instance detailsDefined inData.Functor.Classes | |
| Ord1 (Proxy ::Type ->Type)Source# | Since: 4.9.0.0 |
Instance detailsDefined inData.Functor.Classes | |
| Eq1 (Proxy ::Type ->Type)Source# | Since: 4.9.0.0 |
| Contravariant (Proxy ::Type ->Type)Source# | |
| Bounded (Proxy t)Source# | Since: 4.7.0.0 |
| Enum (Proxy s)Source# | Since: 4.7.0.0 |
Instance detailsDefined inData.Proxy Methods succ ::Proxy s ->Proxy sSource# pred ::Proxy s ->Proxy sSource# fromEnum ::Proxy s ->IntSource# 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 |
| Data t =>Data (Proxy t)Source# | Since: 4.7.0.0 |
Instance detailsDefined inData.Data 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 ->ConstrSource# dataTypeOf ::Proxy t ->DataTypeSource# 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 tSource# gmapQl :: (r -> r' -> r) -> r -> (forall d.Data d => d -> r') ->Proxy t -> rSource# gmapQr :: (r' -> r -> r) -> r -> (forall d.Data d => d -> r') ->Proxy t -> rSource# gmapQ :: (forall d.Data d => d -> u) ->Proxy t -> [u]Source# gmapQi ::Int -> (forall d.Data d => d -> u) ->Proxy t -> uSource# 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 |
| Read (Proxy t)Source# | Since: 4.7.0.0 |
| Show (Proxy s)Source# | Since: 4.7.0.0 |
| Ix (Proxy s)Source# | Since: 4.7.0.0 |
Instance detailsDefined inData.Proxy | |
| Generic (Proxy t)Source# | |
| Semigroup (Proxy s)Source# | Since: 4.9.0.0 |
| Monoid (Proxy s)Source# | Since: 4.7.0.0 |
| typeRep1 (Proxy :: k ->Type)Source# | Since: 4.6.0.0 |
| typeRep (Proxy t)Source# | Since: 4.6.0.0 |
asProxyTypeOf :: a -> proxy a -> aSource#
asProxyTypeOf is a type-restricted version ofconst. 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-caseproxy 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
Produced byHaddock version 2.20.0