polysemy-0.1.2.0: Higher-order, low-boilerplate, zero-cost free monads.

Safe HaskellNone
LanguageHaskell2010

Polysemy.Internal.TH.Effect

Description

This module provides Template Haskell functions for automatically generating effect operation functions (that is, functions that use send) from a given effect algebra. For example, using the FileSystem effect from the example in the module documentation for Polysemy, we can write the following:

data FileSystem m a where
  ReadFile :: FilePath -> FileSystem String
  WriteFile :: FilePath -> String -> FileSystem ()
makeSem ''FileSystem

This will automatically generate the following functions:

readFile :: Member FileSystem r => FilePath -> Sem r String
readFile a = send (ReadFile a)

writeFile :: Member FileSystem r => FilePath -> String -> Sem r ()
writeFile a b = send (WriteFile a b)
Synopsis

Documentation

makeSem :: Name -> Q [Dec] Source #

If T is a GADT representing an effect algebra, as described in the module documentation for Polysemy, $(makeSem ''T) automatically generates a smart constructor for every data constructor of T.

Since: 0.1.2.0

makeSem_ :: Name -> Q [Dec] Source #

Like makeSem, but does not provide type signatures. This can be used to attach Haddock comments to individual arguments for each generated function.

data Lang m a where
  Output :: String -> Lang ()

makeSem_ ''Lang

-- | Output a string.
output :: Member Lang r
       => String         -- ^ String to output.
       -> Sem r ()  -- ^ No result.

Note that makeSem_ must be used before the explicit type signatures.

Since: 0.1.2.0