effectful-core-1.2.0.0: An easy to use, performant extensible effects library.
Safe HaskellNone
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 :> es => e :> (x ': es) Source # 
Instance details

Defined in Effectful.Internal.Effect

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

Defined in Effectful.Internal.Effect

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

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 Subset (xs :: [Effect]) (es :: [Effect]) where Source #

Provide evidence that xs is a subset of es.

Minimal complete definition

Nothing

Methods

reifyIndices :: [Int] Source #

Instances

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

Defined in Effectful.Internal.Effect

Methods

reifyIndices :: [Int] Source #

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

Defined in Effectful.Internal.Effect

Methods

reifyIndices :: [Int] Source #

Re-exports

type Type = Type #

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