sop-core-0.5.0.2: True Sums of Products
Safe Haskell None
Language Haskell2010

Data.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.

Synopsis

Singletons

data SList :: [k] -> Type where Source #

Explicit singleton list.

A singleton list can be used to reveal the structure of a type-level list argument that the function is quantified over. For every type-level list xs , there is one non-bottom value of type SList xs .

Note that these singleton lists are polymorphic in the list elements; we do not require a singleton representation for them.

Since: 0.2

Constructors

SNil :: SList '[]
SCons :: SListI xs => SList (x ': xs)

type SListI = All Top Source #

Implicit singleton list.

A singleton list can be used to reveal the structure of a type-level list argument that the function is quantified over.

Since 0.4.0.0, this is now defined in terms of All . A singleton list provides a witness for a type-level list where the elements need not satisfy any additional constraints.

Since: 0.4.0.0

sList :: SListI xs => SList xs Source #

Get hold of an explicit singleton (that one can then pattern match on) for a type-level list

para_SList :: SListI xs => r '[] -> ( forall y ys. SListI ys => r ys -> r (y ': ys)) -> r xs Source #

Paramorphism for a type-level list.

Since: 0.4.0.0

case_SList :: SListI xs => r '[] -> ( forall y ys. SListI ys => r (y ': ys)) -> r xs Source #

Case distinction on a type-level list.

Since: 0.4.0.0

Shape of type-level lists

shape :: forall k (xs :: [k]). SListI xs => Shape xs Source #

The shape of a type-level list.

lengthSList :: forall k (xs :: [k]) proxy. SListI xs => proxy xs -> Int Source #

The length of a type-level list.

Since: 0.2