| Safe Haskell | Safe | 
|---|---|
| Language | Haskell2010 | 
Proxy
Documentation
data Proxy (t :: k) :: forall k. k -> * #
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 the
 Proxy :: 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 | 
Instances
| Generic1 (Proxy :: k -> *) | |
| Monad (Proxy :: * -> *) | Since: base-4.7.0.0  | 
| Functor (Proxy :: * -> *) | Since: base-4.7.0.0  | 
| Applicative (Proxy :: * -> *) | Since: base-4.7.0.0  | 
| Foldable (Proxy :: * -> *) | Since: base-4.7.0.0  | 
Defined in Data.Foldable Methods fold :: Monoid m => Proxy m -> m # foldMap :: Monoid m => (a -> m) -> Proxy a -> m # foldr :: (a -> b -> b) -> b -> Proxy a -> b # foldr' :: (a -> b -> b) -> b -> Proxy a -> b # foldl :: (b -> a -> b) -> b -> Proxy a -> b # foldl' :: (b -> a -> b) -> b -> Proxy a -> b # foldr1 :: (a -> a -> a) -> Proxy a -> a # foldl1 :: (a -> a -> a) -> Proxy a -> a # elem :: Eq a => a -> Proxy a -> Bool # maximum :: Ord a => Proxy a -> a # minimum :: Ord a => Proxy a -> a #  | |
| Traversable (Proxy :: * -> *) | Since: base-4.7.0.0  | 
| Alternative (Proxy :: * -> *) | Since: base-4.9.0.0  | 
| Distributive (Proxy :: * -> *) | |
| Contravariant (Proxy :: * -> *) | |
| Representable (Proxy :: * -> *) | |
| ToJSON1 (Proxy :: * -> *) | |
Defined in Data.Aeson.Types.ToJSON Methods liftToJSON :: (a -> Value) -> ([a] -> Value) -> Proxy a -> Value # liftToJSONList :: (a -> Value) -> ([a] -> Value) -> [Proxy a] -> Value # liftToEncoding :: (a -> Encoding) -> ([a] -> Encoding) -> Proxy a -> Encoding # liftToEncodingList :: (a -> Encoding) -> ([a] -> Encoding) -> [Proxy a] -> Encoding #  | |
| FromJSON1 (Proxy :: * -> *) | |
| MonadPlus (Proxy :: * -> *) | Since: base-4.9.0.0  | 
| Eq1 (Proxy :: * -> *) | Since: base-4.9.0.0  | 
| Ord1 (Proxy :: * -> *) | Since: base-4.9.0.0  | 
Defined in Data.Functor.Classes  | |
| Read1 (Proxy :: * -> *) | Since: base-4.9.0.0  | 
Defined in Data.Functor.Classes  | |
| Show1 (Proxy :: * -> *) | Since: base-4.9.0.0  | 
| MonadZip (Proxy :: * -> *) | Since: base-4.9.0.0  | 
| Compactable (Proxy :: * -> *) | |
Defined in Control.Compactable Methods compact :: Proxy (Maybe a) -> Proxy a # separate :: Proxy (Either l r) -> (Proxy l, Proxy r) # filter :: (a -> Bool) -> Proxy a -> Proxy a # partition :: (a -> Bool) -> Proxy a -> (Proxy a, Proxy a) # fmapMaybe :: Functor Proxy => (a -> Maybe b) -> Proxy a -> Proxy b # fmapEither :: Functor Proxy => (a -> Either l r) -> Proxy a -> (Proxy l, Proxy r) # applyMaybe :: Applicative Proxy => Proxy (a -> Maybe b) -> Proxy a -> Proxy b # applyEither :: Applicative Proxy => Proxy (a -> Either l r) -> Proxy a -> (Proxy l, Proxy r) # bindMaybe :: Monad Proxy => Proxy a -> (a -> Proxy (Maybe b)) -> Proxy b # bindEither :: Monad Proxy => Proxy a -> (a -> Proxy (Either l r)) -> (Proxy l, Proxy r) # traverseMaybe :: (Applicative g, Traversable Proxy) => (a -> g (Maybe b)) -> Proxy a -> g (Proxy b) # traverseEither :: (Applicative g, Traversable Proxy) => (a -> g (Either l r)) -> Proxy a -> g (Proxy l, Proxy r) #  | |
| CompactFold (Proxy :: * -> *) | |
Defined in Control.Compactable Methods compactFold :: Foldable g => Proxy (g a) -> Proxy a # separateFold :: Bifoldable g => Proxy (g a b) -> (Proxy a, Proxy b) # fmapFold :: (Functor Proxy, Foldable g) => (a -> g b) -> Proxy a -> Proxy b # fmapBifold :: (Functor Proxy, Bifoldable g) => (a -> g l r) -> Proxy a -> (Proxy l, Proxy r) # applyFold :: (Applicative Proxy, Foldable g) => Proxy (a -> g b) -> Proxy a -> Proxy b # applyBifold :: (Applicative Proxy, Bifoldable g) => Proxy (a -> g l r) -> Proxy a -> (Proxy l, Proxy r) # bindFold :: (Monad Proxy, Foldable g) => Proxy a -> (a -> Proxy (g b)) -> Proxy b # bindBifold :: (Monad Proxy, Bifoldable g) => Proxy a -> (a -> Proxy (g l r)) -> (Proxy l, Proxy r) # traverseFold :: (Applicative h, Foldable g, Traversable Proxy) => (a -> h (g b)) -> Proxy a -> h (Proxy b) # traverseBifold :: (Applicative h, Bifoldable g, Traversable Proxy) => (a -> h (g l r)) -> Proxy a -> h (Proxy l, Proxy r) #  | |
| Divisible (Proxy :: * -> *) | |
| Decidable (Proxy :: * -> *) | |
| NFData1 (Proxy :: * -> *) | Since: deepseq-1.4.3.0  | 
Defined in Control.DeepSeq  | |
| Hashable1 (Proxy :: * -> *) | |
Defined in Data.Hashable.Class  | |
| Apply (Proxy :: * -> *) | |
| Pointed (Proxy :: * -> *) | |
Defined in Data.Pointed  | |
| Plus (Proxy :: * -> *) | |
Defined in Data.Functor.Plus  | |
| Alt (Proxy :: * -> *) | |
| Bind (Proxy :: * -> *) | |
| Extend (Proxy :: * -> *) | |
| Bounded (Proxy t) | |
| Enum (Proxy s) | Since: base-4.7.0.0  | 
| Eq (Proxy s) | Since: base-4.7.0.0  | 
| Data t => Data (Proxy t) | Since: base-4.7.0.0  | 
Defined in Data.Data Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Proxy t -> c (Proxy t) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Proxy t) # toConstr :: Proxy t -> Constr # dataTypeOf :: Proxy t -> DataType # dataCast1 :: Typeable t0 => (forall d. Data d => c (t0 d)) -> Maybe (c (Proxy t)) # dataCast2 :: Typeable t0 => (forall d e. (Data d, Data e) => c (t0 d e)) -> Maybe (c (Proxy t)) # gmapT :: (forall b. Data b => b -> b) -> Proxy t -> Proxy t # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Proxy t -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Proxy t -> r # gmapQ :: (forall d. Data d => d -> u) -> Proxy t -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Proxy t -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Proxy t -> m (Proxy t) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Proxy t -> m (Proxy t) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Proxy t -> m (Proxy t) #  | |
| Ord (Proxy s) | Since: base-4.7.0.0  | 
| Read (Proxy t) | Since: base-4.7.0.0  | 
| Show (Proxy s) | Since: base-4.7.0.0  | 
| Ix (Proxy s) | Since: base-4.7.0.0  | 
Defined in Data.Proxy  | |
| Generic (Proxy t) | |
| Semigroup (Proxy s) | Since: base-4.9.0.0  | 
| Monoid (Proxy s) | Since: base-4.7.0.0  | 
| Hashable (Proxy a) | |
Defined in Data.Hashable.Class  | |
| ToJSON (Proxy a) | |
Defined in Data.Aeson.Types.ToJSON  | |
| FromJSON (Proxy a) | |
| NFData (Proxy a) | Since: deepseq-1.4.0.0  | 
Defined in Control.DeepSeq  | |
| Upper (Proxy a) | |
Defined in Data.Semilattice.Upper Methods upperBound :: Proxy a #  | |
| Lower (Proxy a) | |
Defined in Data.Semilattice.Lower Methods lowerBound :: Proxy a #  | |
| Serialise (Proxy a) | Since: serialise-0.2.0.0  | 
| type Rep1 (Proxy :: k -> *) | |
| type Rep (Proxy :: * -> *) | |
| type Rep (Proxy t) | |
asProxyTypeOf :: a -> proxy a -> a #
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