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

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

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]

Properties

Versions 0.1.0.0, 0.1.0.1, 0.1.0.2, 0.1.0.3, 0.1.0.3
Change log CHANGELOG.md
Dependencies base (>=4.12 && <4.16), fused-effects (>=1.1 && <1.2), 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:09:52Z

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for fused-effects-th-0.1.0.3

[back to package description]

fused-effects-th

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.