xnning/EvEff
Efficient Haskell effect handlers based on evidence translation.
{ "createdAt": "2020-07-22T21:52:33Z", "defaultBranch": "master", "description": "Efficient Haskell effect handlers based on evidence translation.", "fullName": "xnning/EvEff", "homepage": "", "language": "Haskell", "name": "EvEff", "pushedAt": "2021-07-19T02:26:38Z", "stargazersCount": 85, "topics": [], "updatedAt": "2025-11-10T22:14:56Z", "url": "https://github.com/xnning/EvEff"}EvEff: Efficient effect handlers based on Evidence translation
Section titled “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.
Installation:
- First install stack
- Build with
> stack build - Load examples:
> stack ghci eveff:lib..ghci> runEff helloWorld"hello world"
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 Stringgreet = do s <- perform ask () return ("hello " ++ s)
test :: Stringtest = runEff $ handler (Reader{ ask = value "world" }) $ -- @:: Reader String () Int@ do s <- greet -- executes in context @:: Eff (Reader String :* ()) Int@ return sEnjoy,
Daan Leijen and Ningning Xie, May 2020.
[1] “Effect Handlers, Evidently”, Ningning Xie et al., ICFP 2020 (pdf).