| Copyright | (C) 2013 Richard Eisenberg |
|---|---|
| License | (C) 2013 Richard Eisenberg |
| Maintainer | Richard Eisenberg (eir@cis.upenn.edu) |
| Stability | experimental |
| Portability | non-portable |
| Safe Haskell | None |
Data.Singletons.Maybe
Contents
Description
Defines functions and datatypes relating to the singleton for Maybe,
including a singletons version of all the definitions in Data.Maybe.
Because many of these definitions are produced by Template Haskell,
it is not possible to create proper Haddock documentation. Please look
up the corresponding operation in Data.Maybe. Also, please excuse
the apparent repeated variable names. This is due to an interaction
between Template Haskell and Haddock.
- data family Sing a
- type SMaybe z = Sing z
- type family Maybe_ a a a :: b
- sMaybe_ :: forall t t t. Sing t -> (forall t. Sing t -> Sing (t t)) -> Sing t -> Sing (Maybe_ t t t)
- type family IsJust a :: Bool
- sIsJust :: forall t. Sing t -> Sing (IsJust t)
- type family IsNothing a :: Bool
- sIsNothing :: forall t. Sing t -> Sing (IsNothing t)
- type family FromJust a :: a
- sFromJust :: forall t. Sing t -> Sing (FromJust t)
- type family FromMaybe a a :: a
- sFromMaybe :: forall t t. Sing t -> Sing t -> Sing (FromMaybe t t)
- type family MaybeToList a :: [a]
- sMaybeToList :: forall t. Sing t -> Sing (MaybeToList t)
- type family ListToMaybe a :: Maybe a
- sListToMaybe :: forall t. Sing t -> Sing (ListToMaybe t)
- type family CatMaybes a :: [a]
- sCatMaybes :: forall t. Sing t -> Sing (CatMaybes t)
- type family MapMaybe a a :: [b]
- sMapMaybe :: forall t t. (forall t. Sing t -> Sing (t t)) -> Sing t -> Sing (MapMaybe t t)
Documentation
Though Haddock doesn't show it, the Sing instance above declares
constructors
SNothing :: Sing Nothing SJust :: Sing a -> Sing (Just a)
Singletons from Data.Maybe
sMaybe_ :: forall t t t. Sing t -> (forall t. Sing t -> Sing (t t)) -> Sing t -> Sing (Maybe_ t t t)Source
The preceding two definitions are derived from the function maybe in
Data.Maybe. The extra underscore is to avoid name clashes with the type
Maybe.
sIsNothing :: forall t. Sing t -> Sing (IsNothing t)Source
type family MaybeToList a :: [a]Source
sMaybeToList :: forall t. Sing t -> Sing (MaybeToList t)Source
type family ListToMaybe a :: Maybe aSource
sListToMaybe :: forall t. Sing t -> Sing (ListToMaybe t)Source
sCatMaybes :: forall t. Sing t -> Sing (CatMaybes t)Source