freer-0.2.4.0: src/Control/Monad/Freer.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE RankNTypes #-}
{-|
Module : Control.Monad.Freer
Description : Freer - an extensible effects library
Copyright : Allele Dev 2016
License : BSD-3
Maintainer : allele.dev@gmail.com
Stability : experimental
Portability : POSIX
-}
module Control.Monad.Freer (
Member,
Members,
Eff,
run,
runM,
runNat,
handleRelay,
handleRelayS,
send,
Arr,
NonDetEff(..),
makeChoiceA,
msplit
) where
import Control.Monad.Freer.Internal
runNat
:: forall m r e w.
(Member m r)
=> (forall a. e a -> m a) -> Eff (e ': r) w -> Eff r w
runNat f = handleRelay pure (\v -> (send (f v) >>=))