| 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