| Safe Haskell | None | 
|---|---|
| Language | Haskell2010 | 
Control.Effect.TH
Description
Defines splices that cut down on boilerplate associated with declaring new effects.
Synopsis
- makeSmartConstructors :: Name -> DecsQ
Documentation
makeSmartConstructors :: Name -> DecsQ Source #
Given an effect type, this splice generates functions that create per-constructor request functions.
That is to say, given the standard State type
  data State s m k where
    Get :: State s m s
    Put :: s -> State s m ()
an invocation of makeSmartConstructors ''State will generate code that looks like
  get ::
    forall (s :: Type) sig (m :: Type -> Type).
    Has (State s) sig m =>
    m s
  get = send Get
  {-# INLINEABLE get #-}
   put ::
    forall (s :: Type) sig (m :: Type -> Type).
    Has (State s) sig m =>
    s ->
    m ()
  put a = send (Put a)
  {-# INLINEABLE put #-}The type variables in each declared function signature will appear in the order they were defined in the effect type.