eveff: Efficient effect handlers based on evidence translation.

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]

Warnings:

See the Control.Ev.Eff module or README.md for further information


[Skip to Readme]

Properties

Versions 0.1.0.0, 1.0.0.0, 1.0.0.0, 1.0.0.1, 1.0.0.2
Change log ChangeLog.md
Dependencies base (>=4.7 && <5), ghc-prim, primitive [details]
License MIT
Copyright (c) 2020, Microsoft Research, Daan Leijen, Ningning Xie
Author Daan Leijen, Ningning Xie
Maintainer xnning@hku.hk;daan@microsoft.com
Category Control, Effect
Home page https://github.com/xnning/eveff#readme
Bug tracker https://github.com/xnning/eveff/issues
Source repo head: git clone https://github.com/xnning/eveff
Uploaded by ningningxie at 2021-03-15T22:33:38Z

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for eveff-1.0.0.0

[back to package description]

EvEff: Efficient effect handlers based on Evidence translation

Efficient effect handlers based on evidence translation [1]. The interface and design is described in detail in "Effect Handlers in Haskell, Evidently", Ningning Xie and Daan Leijen, Haskell 2020.

An example of defining and using a Reader effect:

{-# LANGUAGE  TypeOperators, FlexibleContexts, Rank2Types #-}
import Control.Ev.Eff

-- A @Reader@ effect definition with one operation @ask@ of type @()@ to @a@.
data Reader a e ans = Reader{ ask :: Op () a e ans }

greet :: (Reader String :? e) => Eff e String
greet = do s <- perform ask ()
           return ("hello " ++ s)

test :: String
test = runEff $
       handler (Reader{ ask = value "world" }) $  -- @:: Reader String () Int@
       do s <- greet                              -- executes in context @:: Eff (Reader String :* ()) Int@
          return (length s)

Enjoy,
Daan Leijen and Ningning Xie, May 2020.

[1] "Effect Handlers, Evidently", Ningning Xie et al., ICFP 2020 (pdf).