effectful-core-2.5.1.0: An easy to use, performant extensible effects library.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Effectful.Internal.Effect

Contents

Description

Type-safe indexing for Env.

This module is intended for internal use only, and may change without warning in subsequent releases.

Synopsis

Documentation

type Effect = (Type -> Type) -> Type -> Type Source #

The kind of effects.

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 ()

Minimal complete definition

Nothing

Methods

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

Instances details
(TypeError (('Text "There is no handler for '" ':<>: 'ShowType e) ':<>: 'Text "' in the context") :: Constraint) => e :> ('[] :: [Effect]) Source # 
Instance details

Defined in Effectful.Internal.Effect

e :> (e ': es) Source # 
Instance details

Defined in Effectful.Internal.Effect

e :> es => e :> (x ': es) Source # 
Instance details

Defined in Effectful.Internal.Effect

type family xs :>> es :: Constraint where ... Source #

Deprecated: Usage of (:>>) slows down GHC too much. 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)

Equations

'[] :>> es = () 
(x : xs) :>> es = (x :> es, xs :>> es) 

class KnownPrefix es => Subset (subEs :: [Effect]) (es :: [Effect]) where Source #

Provide evidence that subEs is a subset of es.

Minimal complete definition

Nothing

Instances

Instances details
(KnownPrefix es, IsUnknownSuffixOf subEs es) => Subset subEs es Source # 
Instance details

Defined in Effectful.Internal.Effect

KnownPrefix es => Subset ('[] :: [Effect]) es Source # 
Instance details

Defined in Effectful.Internal.Effect

(e :> es, Subset subEs es) => Subset (e ': subEs) es Source # 
Instance details

Defined in Effectful.Internal.Effect

class Subset subEs es => KnownSubset (subEs :: [Effect]) (es :: [Effect]) Source #

Provide evidence that subEs is a known subset of es.

Instances

Instances details
KnownSubset ('[] :: [Effect]) es Source # 
Instance details

Defined in Effectful.Internal.Effect

(e :> es, KnownSubset subEs es) => KnownSubset (e ': subEs) es Source # 
Instance details

Defined in Effectful.Internal.Effect

class KnownPrefix (es :: [Effect]) where Source #

Calculate length of a statically known prefix of es.

Instances

Instances details
KnownPrefix es Source # 
Instance details

Defined in Effectful.Internal.Effect

KnownPrefix es => KnownPrefix (e ': es) Source # 
Instance details

Defined in Effectful.Internal.Effect

class IsUnknownSuffixOf (subEs :: [Effect]) (es :: [Effect]) Source #

Require that subEs is the unknown suffix of es.

Instances

Instances details
subEs ~ es => IsUnknownSuffixOf subEs es Source # 
Instance details

Defined in Effectful.Internal.Effect

IsUnknownSuffixOf subEs es => IsUnknownSuffixOf subEs (e ': es) Source # 
Instance details

Defined in Effectful.Internal.Effect

type family (xs :: [Effect]) ++ (ys :: [Effect]) :: [Effect] where ... infixr 5 Source #

Append two type-level lists together.

Equations

'[] ++ ys = ys 
(x : xs) ++ ys = x : (xs ++ ys) 

class KnownEffects (es :: [Effect]) where Source #

Calculate length of a list of known effects.

Minimal complete definition

Nothing

Instances

Instances details
KnownEffects ('[] :: [Effect]) Source # 
Instance details

Defined in Effectful.Internal.Effect

KnownEffects es => KnownEffects (e ': es) Source # 
Instance details

Defined in Effectful.Internal.Effect

Re-exports

type Type = TYPE LiftedRep #

The kind of types with lifted values. For example Int :: Type.