| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Generics.SOP.Sing
Description
Singleton types corresponding to type-level data structures.
The implementation is similar, but subtly different to that of the
singletons package.
See the "True Sums of Products"
paper for details.
Singletons
Explicit singleton.
A singleton can be used to reveal the structure of a type argument that the function is quantified over.
The family Sing should have at most one instance per kind,
and there should be a matching instance for SingI.
Instances
| Eq (Sing [k] xs) | |
| Eq (Sing * x) | |
| Ord (Sing [k] xs) | |
| Ord (Sing * x) | |
| Show (Sing [k] xs) | |
| Show (Sing * x) | |
| data Sing * = SStar | Singleton for types of kind For types of kind |
| data Sing [k] where | Singleton for type-level lists. |
Implicit singleton.
A singleton can be used to reveal the structure of a type argument that the function is quantified over.
The class SingI should have instances that match the
family instances for Sing.
Methods
Get hold of the explicit singleton (that one can then pattern match on).
Shape of type-level lists
data Shape :: [k] -> * where Source
Occassionally it is useful to have an explicit, term-level, representation of type-level lists (esp because of https://ghc.haskell.org/trac/ghc/ticket/9108)
lengthSing :: forall xs. SingI xs => Proxy xs -> Int Source
The length of a type-level list.