Portability | portable |
---|---|
Stability | experimental |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Safe Haskell | None |
Tagged values
Monad (Proxy *) | |
Functor (Proxy *) | |
Typeable1 (Proxy *) | |
Applicative (Proxy *) | |
Foldable (Proxy *) | |
Traversable (Proxy *) | |
Bounded (Proxy k s) | |
Enum (Proxy k s) | |
Eq (Proxy k s) | |
(Typeable (Proxy * s), Data s) => Data (Proxy * s) | |
Eq (Proxy k s) => Ord (Proxy k s) | |
Read (Proxy k s) | |
Show (Proxy k s) | |
Ord (Proxy k s) => Ix (Proxy k s) | |
Monoid (Proxy k s) |
reproxy :: Proxy s -> Proxy tSource
Some times you need to change the proxy you have lying around.
Idiomatic usage is to make a new combinator for the relationship
between the proxies that you want to enforce, and define that
combinator using reproxy
.
data Succ n reproxySucc :: Proxy n -> Proxy (Succ n) reproxySucc = reproxy
asProxyTypeOf :: a -> Proxy a -> aSource
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.