fused-effects-th: Template Haskell helpers for fused-effects.

[ bsd3, control, library ] [ Propose Tags ]

This package provides Template Haskell splices that wrap the smart constructors needed for declaring new effects when using the fused-effects effect system.

[Skip to Readme]
Versions [RSS] [faq],,,
Change log CHANGELOG.md
Dependencies base (>=4.12 && <4.16), fused-effects (==1.1.*), template-haskell (>=2.12 && <2.18) [details]
License BSD-3-Clause
Copyright 2020 Patrick Thomson
Author Patrick Thomson
Maintainer Patrick Thomson <patrickt@github.com>
Category Control
Home page https://github.com/fused-effects/fused-effects-th
Bug tracker https://github.com/fused-effects/fused-effects-th/issues
Source repo head: git clone https://github.com/fused-effects/fused-effects-th.git
Uploaded by patrick_thomson at 2021-04-07T22:11:00Z
Distributions NixOS:
Downloads 271 total (12 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs uploaded by user
Build status unknown [no reports yet]


[Index] [Quick Jump]


Maintainer's Corner

For package maintainers and hackage trustees


Readme for fused-effects-th-

[back to package description]


GitHub CI Hackage BSD-3-Clause license

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.