This package provides Template Haskell helpers for fused-effects. The makeSmartConstructors
splice, given the name of a GADT defining an effect, iterates through the possible constructors and generates functions that construct effects using send
. 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 ()
calling makeSmartConstructors ''State
generates the following code (cleaned up a little from the native Template Haskell output):
get ::
forall s sig m
Has (State s) sig m =>
m s
get = send Get
{-# INLINEABLE get #-}
put ::
forall s sig m.
Has (State s) sig m =>
s ->
m ()
put a = send (Put a)
{-# INLINEABLE put #-}
Bug reports are welcome on the issue tracker.