Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Type-safe indexing for Env
.
This module is intended for internal use only, and may change without warning in subsequent releases.
Synopsis
- type Effect = (Type -> Type) -> Type -> Type
- class (e :: Effect) :> (es :: [Effect]) where
- reifyIndex :: Int
- type family xs :>> es :: Constraint where ...
- class KnownPrefix es => Subset (xs :: [Effect]) (es :: [Effect]) where
- subsetFullyKnown :: Bool
- reifyIndices :: [Int]
- class KnownPrefix (es :: [Effect]) where
- prefixLength :: Int
- class IsUnknownSuffixOf (xs :: [Effect]) (es :: [Effect])
- type Type = TYPE LiftedRep
Documentation
class (e :: Effect) :> (es :: [Effect]) where Source #
A constraint that requires that a particular effect e
is a member of the
type-level list es
. This is used to parameterize an Eff
computation over an arbitrary list of effects, so long as e
is somewhere
in the list.
For example, a computation that only needs access to a mutable value of type
Integer
would have the following type:
State
Integer
:>
es =>Eff
es ()
Nothing
reifyIndex :: Int Source #
Get the position of e
in es
.
Note: GHC is kind enough to cache these values as they're top level CAFs,
so the lookup is amortized O(1)
without any language level tricks.
Instances
(TypeError (('Text "There is no handler for '" :<>: 'ShowType e) :<>: 'Text "' in the context") :: Constraint) => e :> ('[] :: [Effect]) Source # | |
Defined in Effectful.Internal.Effect reifyIndex :: Int Source # | |
e :> (e ': es) Source # | |
Defined in Effectful.Internal.Effect reifyIndex :: Int Source # | |
e :> es => e :> (x ': es) Source # | |
Defined in Effectful.Internal.Effect reifyIndex :: Int Source # |
type family xs :>> es :: Constraint where ... Source #
Deprecated: Usage of (:>>) slows down GHC too much, so it will be removed in 3.0.0.0. See https://github.com/haskell-effectful/effectful/issues/52#issuecomment-1269155485 for more information.
Convenience operator for expressing that a function uses multiple effects
in a more concise way than enumerating them all with (:>)
.
[E1, E2, ..., En]:>>
es ≡ (E1:>
es, E2:>
es, ..., En :> es)
class KnownPrefix es => Subset (xs :: [Effect]) (es :: [Effect]) where Source #
Provide evidence that xs
is a subset of es
.
Nothing
subsetFullyKnown :: Bool Source #
reifyIndices :: [Int] Source #
Instances
(KnownPrefix es, IsUnknownSuffixOf xs es) => Subset xs es Source # | |
Defined in Effectful.Internal.Effect subsetFullyKnown :: Bool Source # reifyIndices :: [Int] Source # | |
KnownPrefix es => Subset ('[] :: [Effect]) es Source # | |
Defined in Effectful.Internal.Effect subsetFullyKnown :: Bool Source # reifyIndices :: [Int] Source # | |
(e :> es, Subset xs es) => Subset (e ': xs) es Source # | |
Defined in Effectful.Internal.Effect subsetFullyKnown :: Bool Source # reifyIndices :: [Int] Source # |
class KnownPrefix (es :: [Effect]) where Source #
Calculate length of a statically known prefix of es
.
prefixLength :: Int Source #
Instances
KnownPrefix es Source # | |
Defined in Effectful.Internal.Effect prefixLength :: Int Source # | |
KnownPrefix es => KnownPrefix (e ': es) Source # | |
Defined in Effectful.Internal.Effect prefixLength :: Int Source # |
class IsUnknownSuffixOf (xs :: [Effect]) (es :: [Effect]) Source #
Require that xs
is the unknown suffix of es
.
Instances
xs ~ es => IsUnknownSuffixOf xs es Source # | |
Defined in Effectful.Internal.Effect | |
IsUnknownSuffixOf xs es => IsUnknownSuffixOf xs (e ': es) Source # | |
Defined in Effectful.Internal.Effect |