Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- type HasField dt fname = (InstrGetFieldC dt fname, InstrSetFieldC dt fname)
- type HasFieldOfType dt fname fieldTy = (HasField dt fname, GetFieldType dt fname ~ fieldTy)
- type family HasFieldsOfType (dt :: Type) (fs :: [NamedField]) :: Constraint where ...
- data NamedField = NamedField Symbol Type
- type (:=) n ty = 'NamedField n ty
- toField :: forall dt name st. InstrGetFieldC dt name => Label name -> (dt & st) :-> (GetFieldType dt name & st)
- toFieldNamed :: forall dt name st. InstrGetFieldC dt name => Label name -> (dt & st) :-> ((name :! GetFieldType dt name) & st)
- getField :: forall dt name st. InstrGetFieldC dt name => Label name -> (dt & st) :-> (GetFieldType dt name & (dt ': st))
- getFieldNamed :: forall dt name st. InstrGetFieldC dt name => Label name -> (dt & st) :-> ((name :! GetFieldType dt name) & (dt ': st))
- setField :: forall dt name st. InstrSetFieldC dt name => Label name -> (GetFieldType dt name ': (dt ': st)) :-> (dt ': st)
- modifyField :: forall dt name st. (InstrGetFieldC dt name, InstrSetFieldC dt name) => Label name -> (forall st0. (GetFieldType dt name ': st0) :-> (GetFieldType dt name ': st0)) -> (dt & st) :-> (dt & st)
- construct :: forall dt st. (InstrConstructC dt, RMap (ConstructorFieldTypes dt)) => Rec (FieldConstructor st) (ConstructorFieldTypes dt) -> st :-> (dt & st)
- constructT :: forall dt fctors st. (InstrConstructC dt, RMap (ConstructorFieldTypes dt), fctors ~ Rec (FieldConstructor st) (ConstructorFieldTypes dt), RecFromTuple fctors) => IsoRecTuple fctors -> st :-> (dt & st)
- constructStack :: forall dt fields st. (InstrConstructC dt, ToTs fields ~ ToTs (ConstructorFieldTypes dt), KnownList fields) => (fields ++ st) :-> (dt & st)
- deconstruct :: forall dt fields st. (InstrDeconstructC dt, KnownList fields, ToTs fields ~ ToTs (ConstructorFieldTypes dt)) => (dt & st) :-> (fields ++ st)
- fieldCtor :: HasCallStack => (st :-> (f & st)) -> FieldConstructor st f
- wrap_ :: forall dt name st. InstrWrapC dt name => Label name -> AppendCtorField (GetCtorField dt name) st :-> (dt & st)
- wrapOne :: forall dt name st. InstrWrapOneC dt name => Label name -> (CtorOnlyField name dt ': st) :-> (dt & st)
- case_ :: forall dt out inp. (InstrCaseC dt, RMap (CaseClauses dt)) => Rec (CaseClauseL inp out) (CaseClauses dt) -> (dt & inp) :-> out
- caseT :: forall dt out inp clauses. CaseTC dt out inp clauses => IsoRecTuple clauses -> (dt & inp) :-> out
- unwrapUnsafe_ :: forall dt name st. InstrUnwrapC dt name => Label name -> (dt & st) :-> (CtorOnlyField name dt ': st)
- type CaseTC dt out inp clauses = (InstrCaseC dt, RMap (CaseClauses dt), RecFromTuple clauses, clauses ~ Rec (CaseClauseL inp out) (CaseClauses dt))
- class CaseArrow name body clause | clause -> name, clause -> body where
- data CaseClauseL (inp :: [Type]) (out :: [Type]) (param :: CaseClauseParam) where
- CaseClauseL :: (AppendCtorField x inp :-> out) -> CaseClauseL inp out ('CaseClauseParam ctor x)
- type InstrConstructC dt = (GenericIsoValue dt, GInstrConstruct (Rep dt))
- type ConstructorFieldTypes dt = GFieldTypes (Rep dt)
- data Rec (a :: u -> Type) (b :: [u]) where
- type (:!) (name :: Symbol) a = NamedF Identity a name
- type (:?) (name :: Symbol) a = NamedF Maybe a name
- arg :: forall (name :: Symbol) a. Name name -> (name :! a) -> a
- argDef :: forall (name :: Symbol) a. Name name -> a -> (name :? a) -> a
- argF :: forall (name :: Symbol) f a. Name name -> NamedF f a name -> f a
Documentation
type HasField dt fname = (InstrGetFieldC dt fname, InstrSetFieldC dt fname) Source #
Allows field access and modification.
type HasFieldOfType dt fname fieldTy = (HasField dt fname, GetFieldType dt fname ~ fieldTy) Source #
Like HasField
, but allows constrainting field type.
type family HasFieldsOfType (dt :: Type) (fs :: [NamedField]) :: Constraint where ... Source #
Shortcut for multiple HasFieldOfType
constraints.
HasFieldsOfType _ '[] = () | |
HasFieldsOfType dt ((n := ty) ': fs) = (HasFieldOfType dt n ty, HasFieldsOfType dt fs) |
type (:=) n ty = 'NamedField n ty infixr 0 Source #
toField :: forall dt name st. InstrGetFieldC dt name => Label name -> (dt & st) :-> (GetFieldType dt name & st) Source #
Extract a field of a datatype replacing the value of this datatype with the extracted field.
For this and the following functions you have to specify field name
which is either record name or name attached with (:!)
operator.
toFieldNamed :: forall dt name st. InstrGetFieldC dt name => Label name -> (dt & st) :-> ((name :! GetFieldType dt name) & st) Source #
Like toField
, but leaves field named.
getField :: forall dt name st. InstrGetFieldC dt name => Label name -> (dt & st) :-> (GetFieldType dt name & (dt ': st)) Source #
Extract a field of a datatype, leaving the original datatype on stack.
getFieldNamed :: forall dt name st. InstrGetFieldC dt name => Label name -> (dt & st) :-> ((name :! GetFieldType dt name) & (dt ': st)) Source #
Like getField
, but leaves field named.
setField :: forall dt name st. InstrSetFieldC dt name => Label name -> (GetFieldType dt name ': (dt ': st)) :-> (dt ': st) Source #
Set a field of a datatype.
modifyField :: forall dt name st. (InstrGetFieldC dt name, InstrSetFieldC dt name) => Label name -> (forall st0. (GetFieldType dt name ': st0) :-> (GetFieldType dt name ': st0)) -> (dt & st) :-> (dt & st) Source #
Apply given modifier to a datatype field.
construct :: forall dt st. (InstrConstructC dt, RMap (ConstructorFieldTypes dt)) => Rec (FieldConstructor st) (ConstructorFieldTypes dt) -> st :-> (dt & st) Source #
Make up a datatype. You provide a pack of individual fields constructors.
Each element of the accepted record should be an instruction wrapped with
fieldCtor
function. This instruction will have access to the stack at
the moment of calling construct
.
Instructions have to output fields of the built datatype, one per instruction;
instructions order is expected to correspond to the order of fields in the
datatype.
constructT :: forall dt fctors st. (InstrConstructC dt, RMap (ConstructorFieldTypes dt), fctors ~ Rec (FieldConstructor st) (ConstructorFieldTypes dt), RecFromTuple fctors) => IsoRecTuple fctors -> st :-> (dt & st) Source #
Version of construct
which accepts tuple of field constructors.
constructStack :: forall dt fields st. (InstrConstructC dt, ToTs fields ~ ToTs (ConstructorFieldTypes dt), KnownList fields) => (fields ++ st) :-> (dt & st) Source #
Construct an object from fields on the stack.
deconstruct :: forall dt fields st. (InstrDeconstructC dt, KnownList fields, ToTs fields ~ ToTs (ConstructorFieldTypes dt)) => (dt & st) :-> (fields ++ st) Source #
Decompose a complex object into its fields
fieldCtor :: HasCallStack => (st :-> (f & st)) -> FieldConstructor st f Source #
Lift an instruction to field constructor.
wrap_ :: forall dt name st. InstrWrapC dt name => Label name -> AppendCtorField (GetCtorField dt name) st :-> (dt & st) Source #
Wrap entry in constructor. Useful for sum types.
wrapOne :: forall dt name st. InstrWrapOneC dt name => Label name -> (CtorOnlyField name dt ': st) :-> (dt & st) Source #
Wrap entry in single-field constructor. Useful for sum types.
case_ :: forall dt out inp. (InstrCaseC dt, RMap (CaseClauses dt)) => Rec (CaseClauseL inp out) (CaseClauses dt) -> (dt & inp) :-> out Source #
caseT :: forall dt out inp clauses. CaseTC dt out inp clauses => IsoRecTuple clauses -> (dt & inp) :-> out Source #
Like case_
, accepts a tuple of clauses, which may be more convenient.
If user is experiencing problems with wierd errors about tuples while using
this function, he should take look at Instances
and ensure
that his tuple isn't bigger than generated instances, if so, he should probably
extend number of generated instances.
unwrapUnsafe_ :: forall dt name st. InstrUnwrapC dt name => Label name -> (dt & st) :-> (CtorOnlyField name dt ': st) Source #
Unwrap a constructor with the given name. Useful for sum types.
type CaseTC dt out inp clauses = (InstrCaseC dt, RMap (CaseClauses dt), RecFromTuple clauses, clauses ~ Rec (CaseClauseL inp out) (CaseClauses dt)) Source #
class CaseArrow name body clause | clause -> name, clause -> body where Source #
Provides "case" arrow which works on different wrappers for clauses.
(/->) :: Label name -> body -> clause infixr 0 Source #
Lift an instruction to case clause.
You should write out constructor name corresponding to the clause explicitly. Prefix constructor name with "c" letter, otherwise your label will not be recognized by Haskell parser. Passing constructor name can be circumvented but doing so is not recomended as mentioning contructor name improves readability and allows avoiding some mistakes.
Instances
(name ~ AppendSymbol "c" ctor, body ~ (AppendCtorField x inp :-> out)) => CaseArrow name body (CaseClauseL inp out ('CaseClauseParam ctor x)) Source # | |
Defined in Lorentz.ADT (/->) :: Label name -> body -> CaseClauseL inp out ('CaseClauseParam ctor x) Source # |
data CaseClauseL (inp :: [Type]) (out :: [Type]) (param :: CaseClauseParam) where Source #
Lorentz analogy of CaseClause
, it works on plain Type
types.
CaseClauseL :: (AppendCtorField x inp :-> out) -> CaseClauseL inp out ('CaseClauseParam ctor x) |
Instances
(name ~ AppendSymbol "c" ctor, body ~ (AppendCtorField x inp :-> out)) => CaseArrow name body (CaseClauseL inp out ('CaseClauseParam ctor x)) Source # | |
Defined in Lorentz.ADT (/->) :: Label name -> body -> CaseClauseL inp out ('CaseClauseParam ctor x) Source # |
type InstrConstructC dt = (GenericIsoValue dt, GInstrConstruct (Rep dt)) #
type ConstructorFieldTypes dt = GFieldTypes (Rep dt) #
Useful re-exports
data Rec (a :: u -> Type) (b :: [u]) where #
A record is parameterized by a universe u
, an interpretation f
and a
list of rows rs
. The labels or indices of the record are given by
inhabitants of the kind u
; the type of values at any label r :: u
is
given by its interpretation f r :: *
.
RNil :: forall u (a :: u -> Type). Rec a ('[] :: [u]) | |
(:&) :: forall u (a :: u -> Type) (r :: u) (rs :: [u]). !(a r) -> !(Rec a rs) -> Rec a (r ': rs) infixr 7 |
Instances
RecSubset (Rec :: (k -> Type) -> [k] -> Type) ('[] :: [k]) (ss :: [k]) ('[] :: [Nat]) | |
Defined in Data.Vinyl.Lens type RecSubsetFCtx Rec f # rsubsetC :: forall g (f :: k0 -> Type). (Functor g, RecSubsetFCtx Rec f) => (Rec f '[] -> g (Rec f '[])) -> Rec f ss -> g (Rec f ss) # rcastC :: forall (f :: k0 -> Type). RecSubsetFCtx Rec f => Rec f ss -> Rec f '[] # rreplaceC :: forall (f :: k0 -> Type). RecSubsetFCtx Rec f => Rec f '[] -> Rec f ss -> Rec f ss # | |
(RElem r ss i, RSubset rs ss is) => RecSubset (Rec :: (k -> Type) -> [k] -> Type) (r ': rs :: [k]) (ss :: [k]) (i ': is) | |
Defined in Data.Vinyl.Lens type RecSubsetFCtx Rec f # rsubsetC :: forall g (f :: k0 -> Type). (Functor g, RecSubsetFCtx Rec f) => (Rec f (r ': rs) -> g (Rec f (r ': rs))) -> Rec f ss -> g (Rec f ss) # rcastC :: forall (f :: k0 -> Type). RecSubsetFCtx Rec f => Rec f ss -> Rec f (r ': rs) # rreplaceC :: forall (f :: k0 -> Type). RecSubsetFCtx Rec f => Rec f (r ': rs) -> Rec f ss -> Rec f ss # | |
RecElem (Rec :: (a -> Type) -> [a] -> Type) (r :: a) (r' :: a) (r ': rs :: [a]) (r' ': rs :: [a]) 'Z | |
Defined in Data.Vinyl.Lens type RecElemFCtx Rec f # | |
(RIndex r (s ': rs) ~ 'S i, RecElem (Rec :: (a -> Type) -> [a] -> Type) r r' rs rs' i) => RecElem (Rec :: (a -> Type) -> [a] -> Type) (r :: a) (r' :: a) (s ': rs :: [a]) (s ': rs' :: [a]) ('S i) | |
Defined in Data.Vinyl.Lens type RecElemFCtx Rec f # | |
TestCoercion f => TestCoercion (Rec f :: [u] -> Type) | |
Defined in Data.Vinyl.Core | |
TestEquality f => TestEquality (Rec f :: [u] -> Type) | |
Defined in Data.Vinyl.Core | |
Eq (Rec f ('[] :: [u])) | |
(Eq (f r), Eq (Rec f rs)) => Eq (Rec f (r ': rs)) | |
Ord (Rec f ('[] :: [u])) | |
Defined in Data.Vinyl.Core | |
(Ord (f r), Ord (Rec f rs)) => Ord (Rec f (r ': rs)) | |
Defined in Data.Vinyl.Core compare :: Rec f (r ': rs) -> Rec f (r ': rs) -> Ordering # (<) :: Rec f (r ': rs) -> Rec f (r ': rs) -> Bool # (<=) :: Rec f (r ': rs) -> Rec f (r ': rs) -> Bool # (>) :: Rec f (r ': rs) -> Rec f (r ': rs) -> Bool # (>=) :: Rec f (r ': rs) -> Rec f (r ': rs) -> Bool # max :: Rec f (r ': rs) -> Rec f (r ': rs) -> Rec f (r ': rs) # min :: Rec f (r ': rs) -> Rec f (r ': rs) -> Rec f (r ': rs) # | |
(RMap rs, ReifyConstraint Show f rs, RecordToList rs) => Show (Rec f rs) | Records may be shown insofar as their points may be shown.
|
Generic (Rec f ('[] :: [u])) | |
Generic (Rec f rs) => Generic (Rec f (r ': rs)) | |
Semigroup (Rec f ('[] :: [u])) | |
(Semigroup (f r), Semigroup (Rec f rs)) => Semigroup (Rec f (r ': rs)) | |
Monoid (Rec f ('[] :: [u])) | |
(Monoid (f r), Monoid (Rec f rs)) => Monoid (Rec f (r ': rs)) | |
Storable (Rec f ('[] :: [u])) | |
Defined in Data.Vinyl.Core | |
(Storable (f r), Storable (Rec f rs)) => Storable (Rec f (r ': rs)) | |
Defined in Data.Vinyl.Core sizeOf :: Rec f (r ': rs) -> Int # alignment :: Rec f (r ': rs) -> Int # peekElemOff :: Ptr (Rec f (r ': rs)) -> Int -> IO (Rec f (r ': rs)) # pokeElemOff :: Ptr (Rec f (r ': rs)) -> Int -> Rec f (r ': rs) -> IO () # peekByteOff :: Ptr b -> Int -> IO (Rec f (r ': rs)) # pokeByteOff :: Ptr b -> Int -> Rec f (r ': rs) -> IO () # | |
type RecSubsetFCtx (Rec :: (k -> Type) -> [k] -> Type) (f :: k -> Type) | |
Defined in Data.Vinyl.Lens | |
type RecSubsetFCtx (Rec :: (k -> Type) -> [k] -> Type) (f :: k -> Type) | |
Defined in Data.Vinyl.Lens | |
type RecElemFCtx (Rec :: (a -> Type) -> [a] -> Type) (f :: a -> Type) | |
Defined in Data.Vinyl.Lens | |
type RecElemFCtx (Rec :: (a -> Type) -> [a] -> Type) (f :: a -> Type) | |
Defined in Data.Vinyl.Lens | |
type Rep (Rec f (r ': rs)) | |
Defined in Data.Vinyl.Core type Rep (Rec f (r ': rs)) = C1 ('MetaCons ":&" ('InfixI 'RightAssociative 7) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (f r)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rep (Rec f rs))) | |
type Rep (Rec f ('[] :: [u])) | |
Defined in Data.Vinyl.Core | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8, f x9, f x10, f x11, f x12, f x13, f x14, f x15, f x16, f x17, f x18, f x19, f x20, f x21, f x22, f x23, f x24, f x25) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8, f x9, f x10, f x11, f x12, f x13, f x14, f x15, f x16, f x17, f x18, f x19, f x20, f x21, f x22, f x23, f x24) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8, f x9, f x10, f x11, f x12, f x13, f x14, f x15, f x16, f x17, f x18, f x19, f x20, f x21, f x22, f x23) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8, f x9, f x10, f x11, f x12, f x13, f x14, f x15, f x16, f x17, f x18, f x19, f x20, f x21, f x22) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8, f x9, f x10, f x11, f x12, f x13, f x14, f x15, f x16, f x17, f x18, f x19, f x20, f x21) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8, f x9, f x10, f x11, f x12, f x13, f x14, f x15, f x16, f x17, f x18, f x19, f x20) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8, f x9, f x10, f x11, f x12, f x13, f x14, f x15, f x16, f x17, f x18, f x19) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8, f x9, f x10, f x11, f x12, f x13, f x14, f x15, f x16, f x17, f x18) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8, f x9, f x10, f x11, f x12, f x13, f x14, f x15, f x16, f x17) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8, f x9, f x10, f x11, f x12, f x13, f x14, f x15, f x16) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8, f x9, f x10, f x11, f x12, f x13, f x14, f x15) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8, f x9, f x10, f x11, f x12, f x13, f x14) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8, f x9, f x10, f x11, f x12, f x13) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8, f x9, f x10, f x11, f x12) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8, f x9, f x10, f x11) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8, f x9, f x10) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8, x9]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8, f x9) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7, x8]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7, f x8) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6, x7]) = (f x1, f x2, f x3, f x4, f x5, f x6, f x7) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5, x6]) = (f x1, f x2, f x3, f x4, f x5, f x6) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4, x5]) = (f x1, f x2, f x3, f x4, f x5) | |
type IsoRecTuple (Rec f '[x1, x2, x3, x4]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3, x4]) = (f x1, f x2, f x3, f x4) | |
type IsoRecTuple (Rec f '[x1, x2, x3]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2, x3]) = (f x1, f x2, f x3) | |
type IsoRecTuple (Rec f '[x1, x2]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x1, x2]) = (f x1, f x2) | |
type IsoRecTuple (Rec f '[x]) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f '[x]) = f x | |
type IsoRecTuple (Rec f ('[] :: [u])) | |
Defined in Util.TypeTuple.Instances type IsoRecTuple (Rec f ('[] :: [u])) = () |
type (:!) (name :: Symbol) a = NamedF Identity a name #
Infix notation for the type of a named parameter.
type (:?) (name :: Symbol) a = NamedF Maybe a name #
Infix notation for the type of an optional named parameter.
arg :: forall (name :: Symbol) a. Name name -> (name :! a) -> a #
arg
unwraps a named parameter with the specified name. One way to use it is
to match on arguments with -XViewPatterns
:
fn (arg #t -> t) (arg #f -> f) = ...
This way, the names of parameters can be inferred from the patterns: no type
signature for fn
is required. In case a type signature for fn
is
provided, the parameters must come in the same order:
fn :: "t" :! Integer -> "f" :! Integer -> ... fn (arg #t -> t) (arg #f -> f) = ... -- ok fn (arg #f -> f) (arg #t -> t) = ... -- does not typecheck