Copyright | (C) 2013 Richard Eisenberg |
---|---|
License | BSD-style (see LICENSE) |
Maintainer | Richard Eisenberg (eir@cis.upenn.edu) |
Stability | experimental |
Portability | non-portable |
Safe Haskell | None |
Language | Haskell2010 |
Data.Singletons.TH
Contents
Description
This module contains everything you need to derive your own singletons via Template Haskell.
TURN ON -XScopedTypeVariables
IN YOUR MODULE IF YOU WANT THIS TO WORK.
- singletons :: DsMonad q => q [Dec] -> q [Dec]
- singletonsOnly :: DsMonad q => q [Dec] -> q [Dec]
- genSingletons :: DsMonad q => [Name] -> q [Dec]
- promote :: DsMonad q => q [Dec] -> q [Dec]
- promoteOnly :: DsMonad q => q [Dec] -> q [Dec]
- genDefunSymbols :: DsMonad q => [Name] -> q [Dec]
- genPromotions :: DsMonad q => [Name] -> q [Dec]
- promoteEqInstances :: DsMonad q => [Name] -> q [Dec]
- promoteEqInstance :: DsMonad q => Name -> q [Dec]
- singEqInstances :: DsMonad q => [Name] -> q [Dec]
- singEqInstance :: DsMonad q => Name -> q [Dec]
- singEqInstancesOnly :: DsMonad q => [Name] -> q [Dec]
- singEqInstanceOnly :: DsMonad q => Name -> q [Dec]
- singDecideInstances :: DsMonad q => [Name] -> q [Dec]
- singDecideInstance :: DsMonad q => Name -> q [Dec]
- promoteOrdInstances :: DsMonad q => [Name] -> q [Dec]
- promoteOrdInstance :: DsMonad q => Name -> q [Dec]
- singOrdInstances :: DsMonad q => [Name] -> q [Dec]
- singOrdInstance :: DsMonad q => Name -> q [Dec]
- promoteBoundedInstances :: DsMonad q => [Name] -> q [Dec]
- promoteBoundedInstance :: DsMonad q => Name -> q [Dec]
- singBoundedInstances :: DsMonad q => [Name] -> q [Dec]
- singBoundedInstance :: DsMonad q => Name -> q [Dec]
- promoteEnumInstances :: DsMonad q => [Name] -> q [Dec]
- promoteEnumInstance :: DsMonad q => Name -> q [Dec]
- singEnumInstances :: DsMonad q => [Name] -> q [Dec]
- singEnumInstance :: DsMonad q => Name -> q [Dec]
- cases :: DsMonad q => Name -> q Exp -> q Exp -> q Exp
- sCases :: DsMonad q => Name -> q Exp -> q Exp -> q Exp
- data family Sing a
- module Data.Singletons
- class (kproxy ~ KProxy) => PEq kproxy where
- type family If cond tru fls :: k
- sIf :: Sing a -> Sing b -> Sing c -> Sing (If a b c)
- type family a :&& a :: Bool
- class (kparam ~ KProxy) => SEq kparam where
- class (PEq (KProxy :: KProxy a), kproxy ~ KProxy) => POrd kproxy where
- class (SEq (KProxy :: KProxy a), kproxy ~ KProxy) => SOrd kproxy where
- sCompare :: forall t t. Sing t -> Sing t -> Sing (Apply (Apply CompareSym0 t) t :: Ordering)
- (%:<) :: forall t t. Sing t -> Sing t -> Sing (Apply (Apply (:<$) t) t :: Bool)
- (%:<=) :: forall t t. Sing t -> Sing t -> Sing (Apply (Apply (:<=$) t) t :: Bool)
- (%:>) :: forall t t. Sing t -> Sing t -> Sing (Apply (Apply (:>$) t) t :: Bool)
- (%:>=) :: forall t t. Sing t -> Sing t -> Sing (Apply (Apply (:>=$) t) t :: Bool)
- sMax :: forall t t. Sing t -> Sing t -> Sing (Apply (Apply MaxSym0 t) t :: a)
- sMin :: forall t t. Sing t -> Sing t -> Sing (Apply (Apply MinSym0 t) t :: a)
- type family ThenCmp a a :: Ordering
- sThenCmp :: forall t t. Sing t -> Sing t -> Sing (Apply (Apply ThenCmpSym0 t) t :: Ordering)
- type family Foldl a a a :: b
- sFoldl :: forall t t t. Sing t -> Sing t -> Sing t -> Sing (Apply (Apply (Apply FoldlSym0 t) t) t :: b)
- type family Any :: k
- class (kparam ~ KProxy) => SDecide kparam where
- data a :~: b :: k -> k -> * where
- data Void :: *
- type Refuted a = a -> Void
- data Decision a
- data Proxy t :: k -> * = Proxy
- data KProxy t :: * -> * = KProxy
- data SomeSing kproxy where
- type family Error str :: k
- data ErrorSym0 l
- type TrueSym0 = True
- type FalseSym0 = False
- type LTSym0 = LT
- type EQSym0 = EQ
- type GTSym0 = GT
- type Tuple0Sym0 = `()`
- data Tuple2Sym0 l
- data Tuple2Sym1 l l
- type Tuple2Sym2 t t = `(t, t)`
- data Tuple3Sym0 l
- data Tuple3Sym1 l l
- data Tuple3Sym2 l l l
- type Tuple3Sym3 t t t = `(t, t, t)`
- data Tuple4Sym0 l
- data Tuple4Sym1 l l
- data Tuple4Sym2 l l l
- data Tuple4Sym3 l l l l
- type Tuple4Sym4 t t t t = `(t, t, t, t)`
- data Tuple5Sym0 l
- data Tuple5Sym1 l l
- data Tuple5Sym2 l l l
- data Tuple5Sym3 l l l l
- data Tuple5Sym4 l l l l l
- type Tuple5Sym5 t t t t t = `(t, t, t, t, t)`
- data Tuple6Sym0 l
- data Tuple6Sym1 l l
- data Tuple6Sym2 l l l
- data Tuple6Sym3 l l l l
- data Tuple6Sym4 l l l l l
- data Tuple6Sym5 l l l l l l
- type Tuple6Sym6 t t t t t t = `(t, t, t, t, t, t)`
- data Tuple7Sym0 l
- data Tuple7Sym1 l l
- data Tuple7Sym2 l l l
- data Tuple7Sym3 l l l l
- data Tuple7Sym4 l l l l l
- data Tuple7Sym5 l l l l l l
- data Tuple7Sym6 l l l l l l l
- type Tuple7Sym7 t t t t t t t = `(t, t, t, t, t, t, t)`
- data CompareSym0 l
- data ThenCmpSym0 l
- data FoldlSym0 l
- class SuppressUnusedWarnings t where
- suppressUnusedWarnings :: Proxy t -> ()
Primary Template Haskell generation functions
singletons :: DsMonad q => q [Dec] -> q [Dec] Source
Make promoted and singleton versions of all declarations given, retaining the original declarations. See http://www.cis.upenn.edu/~eir/packages/singletons/README.html for further explanation.
singletonsOnly :: DsMonad q => q [Dec] -> q [Dec] Source
Make promoted and singleton versions of all declarations given, discarding the original declarations. Note that a singleton based on a datatype needs the original datatype, so this will fail if it sees any datatype declarations. Classes, instances, and functions are all fine.
genSingletons :: DsMonad q => [Name] -> q [Dec] Source
Generate singleton definitions from a type that is already defined. For example, the singletons package itself uses
$(genSingletons [''Bool, ''Maybe, ''Either, ''[]])
to generate singletons for Prelude types.
promote :: DsMonad q => q [Dec] -> q [Dec] Source
Promote every declaration given to the type level, retaining the originals.
promoteOnly :: DsMonad q => q [Dec] -> q [Dec] Source
Promote each declaration, discarding the originals. Note that a promoted datatype uses the same definition as an original datatype, so this will not work with datatypes. Classes, instances, and functions are all fine.
genDefunSymbols :: DsMonad q => [Name] -> q [Dec] Source
Generate defunctionalization symbols for existing type family
genPromotions :: DsMonad q => [Name] -> q [Dec] Source
Generate promoted definitions from a type that is already defined. This is generally only useful with classes.
Functions to generate equality instances
promoteEqInstances :: DsMonad q => [Name] -> q [Dec] Source
Produce instances for '(:==)' (type-level equality) from the given types
promoteEqInstance :: DsMonad q => Name -> q [Dec] Source
Produce an instance for '(:==)' (type-level equality) from the given type
singEqInstances :: DsMonad q => [Name] -> q [Dec] Source
Create instances of SEq
and type-level '(:==)' for each type in the list
singEqInstance :: DsMonad q => Name -> q [Dec] Source
Create instance of SEq
and type-level '(:==)' for the given type
singEqInstancesOnly :: DsMonad q => [Name] -> q [Dec] Source
Create instances of SEq
(only -- no instance for '(:==)', which SEq
generally
relies on) for each type in the list
singEqInstanceOnly :: DsMonad q => Name -> q [Dec] Source
Create instances of SEq
(only -- no instance for '(:==)', which SEq
generally
relies on) for the given type
singDecideInstances :: DsMonad q => [Name] -> q [Dec] Source
Create instances of SDecide
for each type in the list.
singDecideInstance :: DsMonad q => Name -> q [Dec] Source
Create instance of SDecide
for the given type.
Functions to generate Ord
instances
promoteOrdInstances :: DsMonad q => [Name] -> q [Dec] Source
Produce instances for POrd
from the given types
promoteOrdInstance :: DsMonad q => Name -> q [Dec] Source
Produce an instance for POrd
from the given type
singOrdInstances :: DsMonad q => [Name] -> q [Dec] Source
Create instances of SOrd
for the given types
singOrdInstance :: DsMonad q => Name -> q [Dec] Source
Create instance of SOrd
for the given type
Functions to generate Bounded
instances
promoteBoundedInstances :: DsMonad q => [Name] -> q [Dec] Source
Produce instances for PBounded
from the given types
promoteBoundedInstance :: DsMonad q => Name -> q [Dec] Source
Produce an instance for PBounded
from the given type
singBoundedInstances :: DsMonad q => [Name] -> q [Dec] Source
Create instances of SBounded
for the given types
singBoundedInstance :: DsMonad q => Name -> q [Dec] Source
Create instance of SBounded
for the given type
Functions to generate Enum
instances
promoteEnumInstances :: DsMonad q => [Name] -> q [Dec] Source
Produce instances for PEnum
from the given types
promoteEnumInstance :: DsMonad q => Name -> q [Dec] Source
Produce an instance for PEnum
from the given type
singEnumInstances :: DsMonad q => [Name] -> q [Dec] Source
Create instances of SEnum
for the given types
singEnumInstance :: DsMonad q => Name -> q [Dec] Source
Create instance of SEnum
for the given type
Utility functions
Arguments
:: DsMonad q | |
=> Name | The head of the type of the scrutinee. (Like |
-> q Exp | The scrutinee, in a Template Haskell quote |
-> q Exp | The body, in a Template Haskell quote |
-> q Exp |
The function cases
generates a case expression where each right-hand side
is identical. This may be useful if the type-checker requires knowledge of which
constructor is used to satisfy equality or type-class constraints, but where
each constructor is treated the same.
Arguments
:: DsMonad q | |
=> Name | The head of the type the scrutinee's type is based on.
(Like |
-> q Exp | The scrutinee, in a Template Haskell quote |
-> q Exp | The body, in a Template Haskell quote |
-> q Exp |
The function sCases
generates a case expression where each right-hand side
is identical. This may be useful if the type-checker requires knowledge of which
constructor is used to satisfy equality or type-class constraints, but where
each constructor is treated the same. For sCases
, unlike cases
, the
scrutinee is a singleton. But make sure to pass in the name of the original
datatype, preferring ''Maybe
over ''SMaybe
.
Basic singleton definitions
The singleton kind-indexed data family.
Instances
data Sing Bool where Source | |
data Sing Ordering where Source | |
data Sing * where Source | |
data Sing Nat where Source | |
data Sing Symbol where
| |
data Sing () where Source | |
data Sing [a0] where Source | |
data Sing (Maybe a0) where Source | |
data Sing (TyFun k1 k2 -> *) = SLambda {} Source | |
data Sing (Either a0 b0) where Source | |
data Sing ((,) a0 b0) where Source | |
data Sing ((,,) a0 b0 c0) where Source | |
data Sing ((,,,) a0 b0 c0 d0) where Source | |
data Sing ((,,,,) a0 b0 c0 d0 e0) where Source | |
data Sing ((,,,,,) a0 b0 c0 d0 e0 f0) where Source | |
data Sing ((,,,,,,) a0 b0 c0 d0 e0 f0 g0) where Source |
module Data.Singletons
Auxiliary definitions
These definitions might be mentioned in code generated by Template Haskell, so they must be in scope.
class (kproxy ~ KProxy) => PEq kproxy Source
The promoted analogue of Eq
. If you supply no definition for '(:==)',
then it defaults to a use of '(==)', from Data.Type.Equality
.
Instances
PEq Bool (KProxy Bool) Source | |
PEq Ordering (KProxy Ordering) Source | |
PEq () (KProxy ()) Source | |
PEq [k] (KProxy [k]) Source | |
PEq (Maybe k) (KProxy (Maybe k)) Source | |
PEq (Either k k) (KProxy (Either k k)) Source | |
PEq ((,) k k) (KProxy ((,) k k)) Source | |
PEq ((,,) k k k) (KProxy ((,,) k k k)) Source | |
PEq ((,,,) k k k k) (KProxy ((,,,) k k k k)) Source | |
PEq ((,,,,) k k k k k) (KProxy ((,,,,) k k k k k)) Source | |
PEq ((,,,,,) k k k k k k) (KProxy ((,,,,,) k k k k k k)) Source | |
PEq ((,,,,,,) k k k k k k k) (KProxy ((,,,,,,) k k k k k k k)) Source |
class (kparam ~ KProxy) => SEq kparam where Source
The singleton analogue of Eq
. Unlike the definition for Eq
, it is required
that instances define a body for '(%:==)'. You may also supply a body for '(%:/=)'.
Minimal complete definition
Methods
(%:==) :: forall a b. Sing a -> Sing b -> Sing (a :== b) infix 4 Source
Boolean equality on singletons
(%:/=) :: forall a b. Sing a -> Sing b -> Sing (a :/= b) infix 4 Source
Boolean disequality on singletons
Instances
SEq Bool (KProxy Bool) Source | |
SEq Ordering (KProxy Ordering) Source | |
SEq () (KProxy ()) Source | |
SEq a0 (KProxy a0) => SEq [a] (KProxy [a]) Source | |
SEq a0 (KProxy a0) => SEq (Maybe a) (KProxy (Maybe a)) Source | |
(SEq a0 (KProxy a0), SEq b0 (KProxy b0)) => SEq (Either a b) (KProxy (Either a b)) Source | |
(SEq a0 (KProxy a0), SEq b0 (KProxy b0)) => SEq ((,) a b) (KProxy ((,) a b)) Source | |
(SEq a0 (KProxy a0), SEq b0 (KProxy b0), SEq c0 (KProxy c0)) => SEq ((,,) a b c) (KProxy ((,,) a b c)) Source | |
(SEq a0 (KProxy a0), SEq b0 (KProxy b0), SEq c0 (KProxy c0), SEq d0 (KProxy d0)) => SEq ((,,,) a b c d) (KProxy ((,,,) a b c d)) Source | |
(SEq a0 (KProxy a0), SEq b0 (KProxy b0), SEq c0 (KProxy c0), SEq d0 (KProxy d0), SEq e0 (KProxy e0)) => SEq ((,,,,) a b c d e) (KProxy ((,,,,) a b c d e)) Source | |
(SEq a0 (KProxy a0), SEq b0 (KProxy b0), SEq c0 (KProxy c0), SEq d0 (KProxy d0), SEq e0 (KProxy e0), SEq f0 (KProxy f0)) => SEq ((,,,,,) a b c d e f) (KProxy ((,,,,,) a b c d e f)) Source | |
(SEq a0 (KProxy a0), SEq b0 (KProxy b0), SEq c0 (KProxy c0), SEq d0 (KProxy d0), SEq e0 (KProxy e0), SEq f0 (KProxy f0), SEq g0 (KProxy g0)) => SEq ((,,,,,,) a b c d e f g) (KProxy ((,,,,,,) a b c d e f g)) Source |
class (PEq (KProxy :: KProxy a), kproxy ~ KProxy) => POrd kproxy Source
Associated Types
type Compare arg arg :: Ordering Source
type arg :< arg :: Bool infix 4 Source
type arg :<= arg :: Bool infix 4 Source
type arg :> arg :: Bool infix 4 Source
Instances
POrd Bool (KProxy Bool) Source | |
POrd Ordering (KProxy Ordering) Source | |
POrd () (KProxy ()) Source | |
POrd [a] (KProxy [a]) Source | |
POrd (Maybe a) (KProxy (Maybe a)) Source | |
POrd (Either a b) (KProxy (Either a b)) Source | |
POrd ((,) a b) (KProxy ((,) a b)) Source | |
POrd ((,,) a b c) (KProxy ((,,) a b c)) Source | |
POrd ((,,,) a b c d) (KProxy ((,,,) a b c d)) Source | |
POrd ((,,,,) a b c d e) (KProxy ((,,,,) a b c d e)) Source | |
POrd ((,,,,,) a b c d e f) (KProxy ((,,,,,) a b c d e f)) Source | |
POrd ((,,,,,,) a b c d e f g) (KProxy ((,,,,,,) a b c d e f g)) Source |
class (SEq (KProxy :: KProxy a), kproxy ~ KProxy) => SOrd kproxy where Source
Minimal complete definition
Nothing
Methods
sCompare :: forall t t. Sing t -> Sing t -> Sing (Apply (Apply CompareSym0 t) t :: Ordering) Source
(%:<) :: forall t t. Sing t -> Sing t -> Sing (Apply (Apply (:<$) t) t :: Bool) infix 4 Source
(%:<=) :: forall t t. Sing t -> Sing t -> Sing (Apply (Apply (:<=$) t) t :: Bool) infix 4 Source
(%:>) :: forall t t. Sing t -> Sing t -> Sing (Apply (Apply (:>$) t) t :: Bool) infix 4 Source
(%:>=) :: forall t t. Sing t -> Sing t -> Sing (Apply (Apply (:>=$) t) t :: Bool) infix 4 Source
sMax :: forall t t. Sing t -> Sing t -> Sing (Apply (Apply MaxSym0 t) t :: a) Source
sMin :: forall t t. Sing t -> Sing t -> Sing (Apply (Apply MinSym0 t) t :: a) Source
Instances
SOrd Bool (KProxy Bool) Source | |
SOrd Ordering (KProxy Ordering) Source | |
SOrd () (KProxy ()) Source | |
(SOrd a0 (KProxy a0), SOrd [a0] (KProxy [a0])) => SOrd [a] (KProxy [a]) Source | |
SOrd a0 (KProxy a0) => SOrd (Maybe a) (KProxy (Maybe a)) Source | |
(SOrd a0 (KProxy a0), SOrd b0 (KProxy b0)) => SOrd (Either a b) (KProxy (Either a b)) Source | |
(SOrd a0 (KProxy a0), SOrd b0 (KProxy b0)) => SOrd ((,) a b) (KProxy ((,) a b)) Source | |
(SOrd a0 (KProxy a0), SOrd b0 (KProxy b0), SOrd c0 (KProxy c0)) => SOrd ((,,) a b c) (KProxy ((,,) a b c)) Source | |
(SOrd a0 (KProxy a0), SOrd b0 (KProxy b0), SOrd c0 (KProxy c0), SOrd d0 (KProxy d0)) => SOrd ((,,,) a b c d) (KProxy ((,,,) a b c d)) Source | |
(SOrd a0 (KProxy a0), SOrd b0 (KProxy b0), SOrd c0 (KProxy c0), SOrd d0 (KProxy d0), SOrd e0 (KProxy e0)) => SOrd ((,,,,) a b c d e) (KProxy ((,,,,) a b c d e)) Source | |
(SOrd a0 (KProxy a0), SOrd b0 (KProxy b0), SOrd c0 (KProxy c0), SOrd d0 (KProxy d0), SOrd e0 (KProxy e0), SOrd f0 (KProxy f0)) => SOrd ((,,,,,) a b c d e f) (KProxy ((,,,,,) a b c d e f)) Source | |
(SOrd a0 (KProxy a0), SOrd b0 (KProxy b0), SOrd c0 (KProxy c0), SOrd d0 (KProxy d0), SOrd e0 (KProxy e0), SOrd f0 (KProxy f0), SOrd g0 (KProxy g0)) => SOrd ((,,,,,,) a b c d e f g) (KProxy ((,,,,,,) a b c d e f g)) Source |
sFoldl :: forall t t t. Sing t -> Sing t -> Sing t -> Sing (Apply (Apply (Apply FoldlSym0 t) t) t :: b) Source
type family Any :: k
The type constructor Any
is type to which you can unsafely coerce any
lifted type, and back.
- It is lifted, and hence represented by a pointer
- It does not claim to be a data type, and that's important for the code generator, because the code gen may enter a data value but never enters a function value.
It's also used to instantiate un-constrained type variables after type
checking. For example, length
has type
length :: forall a. [a] -> Int
and the list datacon for the empty list has type
[] :: forall a. [a]
In order to compose these two terms as length []
a type
application is required, but there is no constraint on the
choice. In this situation GHC uses Any
:
length (Any *) ([] (Any *))
Above, we print kinds explicitly, as if with
-fprint-explicit-kinds
.
Note that Any
is kind polymorphic; its kind is thus
forall k. k
.
data a :~: b :: k -> k -> * where infix 4
Propositional equality. If a :~: b
is inhabited by some terminating
value, then the type a
is the same as the type b
. To use this equality
in practice, pattern-match on the a :~: b
to get out the Refl
constructor;
in the body of the pattern-match, the compiler knows that a ~ b
.
Since: 4.7.0.0
data Void :: *
Uninhabited data type
Since: 4.8.0.0
A Decision
about a type a
is either a proof of existence or a proof that a
cannot exist.
data Proxy t :: k -> *
A concrete, poly-kinded proxy type
Constructors
Proxy |
Instances
Monad (Proxy *) | |
Functor (Proxy *) | |
Applicative (Proxy *) | |
Foldable (Proxy *) | |
Traversable (Proxy *) | |
Bounded (Proxy k s) | |
Enum (Proxy k s) | |
Eq (Proxy k s) | |
Data t => Data (Proxy * t) | |
Ord (Proxy k s) | |
Read (Proxy k s) | |
Show (Proxy k s) | |
Ix (Proxy k s) | |
Generic (Proxy * t) | |
Monoid (Proxy k s) | |
type Rep (Proxy k t) = D1 D1Proxy (C1 C1_0Proxy U1) |
data KProxy t :: * -> *
A concrete, promotable proxy type, for use at the kind level There are no instances for this because it is intended at the kind level only
Constructors
KProxy |
data SomeSing kproxy where Source
An existentially-quantified singleton. This type is useful when you want a singleton type, but there is no way of knowing, at compile-time, what the type index will be. To make use of this type, you will generally have to use a pattern-match:
foo :: Bool -> ... foo b = case toSing b of SomeSing sb -> {- fancy dependently-typed code with sb -}
An example like the one above may be easier to write using withSomeSing
.
type family Error str :: k Source
The promotion of error
. This version is more poly-kinded for
easier use.
type Tuple0Sym0 = `()` Source
data Tuple2Sym0 l Source
Instances
SuppressUnusedWarnings (TyFun k (TyFun k ((,) k k) -> *) -> *) (Tuple2Sym0 k k) Source | |
type Apply (TyFun k1 ((,) k k1) -> *) k (Tuple2Sym0 k k1) l0 = Tuple2Sym1 k k1 l0 Source |
data Tuple2Sym1 l l Source
Instances
SuppressUnusedWarnings (k -> TyFun k ((,) k k) -> *) (Tuple2Sym1 k k) Source | |
type Apply ((,) k1 k) k (Tuple2Sym1 k1 k l1) l0 = Tuple2Sym2 k1 k l1 l0 Source |
type Tuple2Sym2 t t = `(t, t)` Source
data Tuple3Sym0 l Source
Instances
SuppressUnusedWarnings (TyFun k (TyFun k (TyFun k ((,,) k k k) -> *) -> *) -> *) (Tuple3Sym0 k k k) Source | |
type Apply (TyFun k1 (TyFun k2 ((,,) k k1 k2) -> *) -> *) k (Tuple3Sym0 k k1 k2) l0 = Tuple3Sym1 k k1 k2 l0 Source |
data Tuple3Sym1 l l Source
Instances
SuppressUnusedWarnings (k -> TyFun k (TyFun k ((,,) k k k) -> *) -> *) (Tuple3Sym1 k k k) Source | |
type Apply (TyFun k1 ((,,) k2 k k1) -> *) k (Tuple3Sym1 k2 k k1 l1) l0 = Tuple3Sym2 k2 k k1 l1 l0 Source |
data Tuple3Sym2 l l l Source
Instances
SuppressUnusedWarnings (k -> k -> TyFun k ((,,) k k k) -> *) (Tuple3Sym2 k k k) Source | |
type Apply ((,,) k1 k2 k) k (Tuple3Sym2 k1 k2 k l1 l2) l0 = Tuple3Sym3 k1 k2 k l1 l2 l0 Source |
type Tuple3Sym3 t t t = `(t, t, t)` Source
data Tuple4Sym0 l Source
Instances
SuppressUnusedWarnings (TyFun k (TyFun k (TyFun k (TyFun k ((,,,) k k k k) -> *) -> *) -> *) -> *) (Tuple4Sym0 k k k k) Source | |
type Apply (TyFun k1 (TyFun k2 (TyFun k3 ((,,,) k k1 k2 k3) -> *) -> *) -> *) k (Tuple4Sym0 k k1 k2 k3) l0 = Tuple4Sym1 k k1 k2 k3 l0 Source |
data Tuple4Sym1 l l Source
Instances
SuppressUnusedWarnings (k -> TyFun k (TyFun k (TyFun k ((,,,) k k k k) -> *) -> *) -> *) (Tuple4Sym1 k k k k) Source | |
type Apply (TyFun k1 (TyFun k2 ((,,,) k3 k k1 k2) -> *) -> *) k (Tuple4Sym1 k3 k k1 k2 l1) l0 = Tuple4Sym2 k3 k k1 k2 l1 l0 Source |
data Tuple4Sym2 l l l Source
Instances
SuppressUnusedWarnings (k -> k -> TyFun k (TyFun k ((,,,) k k k k) -> *) -> *) (Tuple4Sym2 k k k k) Source | |
type Apply (TyFun k1 ((,,,) k2 k3 k k1) -> *) k (Tuple4Sym2 k2 k3 k k1 l1 l2) l0 = Tuple4Sym3 k2 k3 k k1 l1 l2 l0 Source |
data Tuple4Sym3 l l l l Source
Instances
SuppressUnusedWarnings (k -> k -> k -> TyFun k ((,,,) k k k k) -> *) (Tuple4Sym3 k k k k) Source | |
type Apply ((,,,) k1 k2 k3 k) k (Tuple4Sym3 k1 k2 k3 k l1 l2 l3) l0 = Tuple4Sym4 k1 k2 k3 k l1 l2 l3 l0 Source |
type Tuple4Sym4 t t t t = `(t, t, t, t)` Source
data Tuple5Sym0 l Source
Instances
SuppressUnusedWarnings (TyFun k (TyFun k (TyFun k (TyFun k (TyFun k ((,,,,) k k k k k) -> *) -> *) -> *) -> *) -> *) (Tuple5Sym0 k k k k k) Source | |
type Apply (TyFun k1 (TyFun k2 (TyFun k3 (TyFun k4 ((,,,,) k k1 k2 k3 k4) -> *) -> *) -> *) -> *) k (Tuple5Sym0 k k1 k2 k3 k4) l0 = Tuple5Sym1 k k1 k2 k3 k4 l0 Source |
data Tuple5Sym1 l l Source
Instances
SuppressUnusedWarnings (k -> TyFun k (TyFun k (TyFun k (TyFun k ((,,,,) k k k k k) -> *) -> *) -> *) -> *) (Tuple5Sym1 k k k k k) Source | |
type Apply (TyFun k1 (TyFun k2 (TyFun k3 ((,,,,) k4 k k1 k2 k3) -> *) -> *) -> *) k (Tuple5Sym1 k4 k k1 k2 k3 l1) l0 = Tuple5Sym2 k4 k k1 k2 k3 l1 l0 Source |
data Tuple5Sym2 l l l Source
Instances
SuppressUnusedWarnings (k -> k -> TyFun k (TyFun k (TyFun k ((,,,,) k k k k k) -> *) -> *) -> *) (Tuple5Sym2 k k k k k) Source | |
type Apply (TyFun k1 (TyFun k2 ((,,,,) k3 k4 k k1 k2) -> *) -> *) k (Tuple5Sym2 k3 k4 k k1 k2 l1 l2) l0 = Tuple5Sym3 k3 k4 k k1 k2 l1 l2 l0 Source |
data Tuple5Sym3 l l l l Source
Instances
SuppressUnusedWarnings (k -> k -> k -> TyFun k (TyFun k ((,,,,) k k k k k) -> *) -> *) (Tuple5Sym3 k k k k k) Source | |
type Apply (TyFun k1 ((,,,,) k2 k3 k4 k k1) -> *) k (Tuple5Sym3 k2 k3 k4 k k1 l1 l2 l3) l0 = Tuple5Sym4 k2 k3 k4 k k1 l1 l2 l3 l0 Source |
data Tuple5Sym4 l l l l l Source
Instances
SuppressUnusedWarnings (k -> k -> k -> k -> TyFun k ((,,,,) k k k k k) -> *) (Tuple5Sym4 k k k k k) Source | |
type Apply ((,,,,) k1 k2 k3 k4 k) k (Tuple5Sym4 k1 k2 k3 k4 k l1 l2 l3 l4) l0 = Tuple5Sym5 k1 k2 k3 k4 k l1 l2 l3 l4 l0 Source |
type Tuple5Sym5 t t t t t = `(t, t, t, t, t)` Source
data Tuple6Sym0 l Source
Instances
SuppressUnusedWarnings (TyFun k (TyFun k (TyFun k (TyFun k (TyFun k (TyFun k ((,,,,,) k k k k k k) -> *) -> *) -> *) -> *) -> *) -> *) (Tuple6Sym0 k k k k k k) Source | |
type Apply (TyFun k1 (TyFun k2 (TyFun k3 (TyFun k4 (TyFun k5 ((,,,,,) k k1 k2 k3 k4 k5) -> *) -> *) -> *) -> *) -> *) k (Tuple6Sym0 k k1 k2 k3 k4 k5) l0 = Tuple6Sym1 k k1 k2 k3 k4 k5 l0 Source |
data Tuple6Sym1 l l Source
Instances
SuppressUnusedWarnings (k -> TyFun k (TyFun k (TyFun k (TyFun k (TyFun k ((,,,,,) k k k k k k) -> *) -> *) -> *) -> *) -> *) (Tuple6Sym1 k k k k k k) Source | |
type Apply (TyFun k1 (TyFun k2 (TyFun k3 (TyFun k4 ((,,,,,) k5 k k1 k2 k3 k4) -> *) -> *) -> *) -> *) k (Tuple6Sym1 k5 k k1 k2 k3 k4 l1) l0 = Tuple6Sym2 k5 k k1 k2 k3 k4 l1 l0 Source |
data Tuple6Sym2 l l l Source
Instances
SuppressUnusedWarnings (k -> k -> TyFun k (TyFun k (TyFun k (TyFun k ((,,,,,) k k k k k k) -> *) -> *) -> *) -> *) (Tuple6Sym2 k k k k k k) Source | |
type Apply (TyFun k1 (TyFun k2 (TyFun k3 ((,,,,,) k4 k5 k k1 k2 k3) -> *) -> *) -> *) k (Tuple6Sym2 k4 k5 k k1 k2 k3 l1 l2) l0 = Tuple6Sym3 k4 k5 k k1 k2 k3 l1 l2 l0 Source |
data Tuple6Sym3 l l l l Source
Instances
SuppressUnusedWarnings (k -> k -> k -> TyFun k (TyFun k (TyFun k ((,,,,,) k k k k k k) -> *) -> *) -> *) (Tuple6Sym3 k k k k k k) Source | |
type Apply (TyFun k1 (TyFun k2 ((,,,,,) k3 k4 k5 k k1 k2) -> *) -> *) k (Tuple6Sym3 k3 k4 k5 k k1 k2 l1 l2 l3) l0 = Tuple6Sym4 k3 k4 k5 k k1 k2 l1 l2 l3 l0 Source |
data Tuple6Sym4 l l l l l Source
Instances
SuppressUnusedWarnings (k -> k -> k -> k -> TyFun k (TyFun k ((,,,,,) k k k k k k) -> *) -> *) (Tuple6Sym4 k k k k k k) Source | |
type Apply (TyFun k1 ((,,,,,) k2 k3 k4 k5 k k1) -> *) k (Tuple6Sym4 k2 k3 k4 k5 k k1 l1 l2 l3 l4) l0 = Tuple6Sym5 k2 k3 k4 k5 k k1 l1 l2 l3 l4 l0 Source |
data Tuple6Sym5 l l l l l l Source
Instances
SuppressUnusedWarnings (k -> k -> k -> k -> k -> TyFun k ((,,,,,) k k k k k k) -> *) (Tuple6Sym5 k k k k k k) Source | |
type Apply ((,,,,,) k1 k2 k3 k4 k5 k) k (Tuple6Sym5 k1 k2 k3 k4 k5 k l1 l2 l3 l4 l5) l0 = Tuple6Sym6 k1 k2 k3 k4 k5 k l1 l2 l3 l4 l5 l0 Source |
type Tuple6Sym6 t t t t t t = `(t, t, t, t, t, t)` Source
data Tuple7Sym0 l Source
Instances
SuppressUnusedWarnings (TyFun k (TyFun k (TyFun k (TyFun k (TyFun k (TyFun k (TyFun k ((,,,,,,) k k k k k k k) -> *) -> *) -> *) -> *) -> *) -> *) -> *) (Tuple7Sym0 k k k k k k k) Source | |
type Apply (TyFun k1 (TyFun k2 (TyFun k3 (TyFun k4 (TyFun k5 (TyFun k6 ((,,,,,,) k k1 k2 k3 k4 k5 k6) -> *) -> *) -> *) -> *) -> *) -> *) k (Tuple7Sym0 k k1 k2 k3 k4 k5 k6) l0 = Tuple7Sym1 k k1 k2 k3 k4 k5 k6 l0 Source |
data Tuple7Sym1 l l Source
Instances
SuppressUnusedWarnings (k -> TyFun k (TyFun k (TyFun k (TyFun k (TyFun k (TyFun k ((,,,,,,) k k k k k k k) -> *) -> *) -> *) -> *) -> *) -> *) (Tuple7Sym1 k k k k k k k) Source | |
type Apply (TyFun k1 (TyFun k2 (TyFun k3 (TyFun k4 (TyFun k5 ((,,,,,,) k6 k k1 k2 k3 k4 k5) -> *) -> *) -> *) -> *) -> *) k (Tuple7Sym1 k6 k k1 k2 k3 k4 k5 l1) l0 = Tuple7Sym2 k6 k k1 k2 k3 k4 k5 l1 l0 Source |
data Tuple7Sym2 l l l Source
Instances
SuppressUnusedWarnings (k -> k -> TyFun k (TyFun k (TyFun k (TyFun k (TyFun k ((,,,,,,) k k k k k k k) -> *) -> *) -> *) -> *) -> *) (Tuple7Sym2 k k k k k k k) Source | |
type Apply (TyFun k1 (TyFun k2 (TyFun k3 (TyFun k4 ((,,,,,,) k5 k6 k k1 k2 k3 k4) -> *) -> *) -> *) -> *) k (Tuple7Sym2 k5 k6 k k1 k2 k3 k4 l1 l2) l0 = Tuple7Sym3 k5 k6 k k1 k2 k3 k4 l1 l2 l0 Source |
data Tuple7Sym3 l l l l Source
Instances
SuppressUnusedWarnings (k -> k -> k -> TyFun k (TyFun k (TyFun k (TyFun k ((,,,,,,) k k k k k k k) -> *) -> *) -> *) -> *) (Tuple7Sym3 k k k k k k k) Source | |
type Apply (TyFun k1 (TyFun k2 (TyFun k3 ((,,,,,,) k4 k5 k6 k k1 k2 k3) -> *) -> *) -> *) k (Tuple7Sym3 k4 k5 k6 k k1 k2 k3 l1 l2 l3) l0 = Tuple7Sym4 k4 k5 k6 k k1 k2 k3 l1 l2 l3 l0 Source |
data Tuple7Sym4 l l l l l Source
Instances
SuppressUnusedWarnings (k -> k -> k -> k -> TyFun k (TyFun k (TyFun k ((,,,,,,) k k k k k k k) -> *) -> *) -> *) (Tuple7Sym4 k k k k k k k) Source | |
type Apply (TyFun k1 (TyFun k2 ((,,,,,,) k3 k4 k5 k6 k k1 k2) -> *) -> *) k (Tuple7Sym4 k3 k4 k5 k6 k k1 k2 l1 l2 l3 l4) l0 = Tuple7Sym5 k3 k4 k5 k6 k k1 k2 l1 l2 l3 l4 l0 Source |
data Tuple7Sym5 l l l l l l Source
Instances
SuppressUnusedWarnings (k -> k -> k -> k -> k -> TyFun k (TyFun k ((,,,,,,) k k k k k k k) -> *) -> *) (Tuple7Sym5 k k k k k k k) Source | |
type Apply (TyFun k1 ((,,,,,,) k2 k3 k4 k5 k6 k k1) -> *) k (Tuple7Sym5 k2 k3 k4 k5 k6 k k1 l1 l2 l3 l4 l5) l0 = Tuple7Sym6 k2 k3 k4 k5 k6 k k1 l1 l2 l3 l4 l5 l0 Source |
data Tuple7Sym6 l l l l l l l Source
Instances
SuppressUnusedWarnings (k -> k -> k -> k -> k -> k -> TyFun k ((,,,,,,) k k k k k k k) -> *) (Tuple7Sym6 k k k k k k k) Source | |
type Apply ((,,,,,,) k1 k2 k3 k4 k5 k6 k) k (Tuple7Sym6 k1 k2 k3 k4 k5 k6 k l1 l2 l3 l4 l5 l6) l0 = Tuple7Sym7 k1 k2 k3 k4 k5 k6 k l1 l2 l3 l4 l5 l6 l0 Source |
type Tuple7Sym7 t t t t t t t = `(t, t, t, t, t, t, t)` Source
data CompareSym0 l Source
Instances
SuppressUnusedWarnings (TyFun k (TyFun k Ordering -> *) -> *) (CompareSym0 k) Source | |
type Apply (TyFun k Ordering -> *) k (CompareSym0 k) l0 = CompareSym1 k l0 Source |
data ThenCmpSym0 l Source
Instances
SuppressUnusedWarnings (TyFun Ordering (TyFun Ordering Ordering -> *) -> *) ThenCmpSym0 Source | |
type Apply (TyFun Ordering Ordering -> *) Ordering ThenCmpSym0 l0 = ThenCmpSym1 l0 Source |
class SuppressUnusedWarnings t where Source
This class (which users should never see) is to be instantiated in order to use an otherwise-unused data constructor, such as the "kind-inference" data constructor for defunctionalization symbols.
Methods
suppressUnusedWarnings :: Proxy t -> () Source
Instances