tagged-0.7: Haskell 98 phantom types to avoid unsafely passing dummy arguments

Portability | portable
Stability | experimental
Maintainer | Edward Kmett <ekmett@gmail.com>
Safe Haskell | Trustworthy

Data.Proxy

Contents

- Proxy values

Description

Synopsis

- data Proxy s = Proxy
- reproxy :: proxy s -> Proxy t
- asProxyTypeOf :: a -> proxy a -> a

# Proxy values

data Proxy s Source

Constructors

Proxy |

Instances

Monad (Proxy *) |
Functor (Proxy *) |
Typeable1 (Proxy *) |
Applicative (Proxy *) |
Foldable (Proxy *) |
Traversable (Proxy *) |
Bounded (Proxy k s) |
Enum (Proxy k s) |
Eq (Proxy k s) |
Data s => Data (Proxy * s) |
Ord (Proxy k s) |
Read (Proxy k s) |
Show (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.