do-notation-dsl-0.1.0.1: An alternative to monads

Safe HaskellSafe
LanguageHaskell2010

Control.Dsl.Shift

Description

 
Synopsis

Documentation

newtype Shift r0 r a Source #

>>> :set -XTypeOperators
>>> :set -XRebindableSyntax
>>> import Prelude hiding ((>>), (>>=), return)
>>> import Control.Dsl
>>> import Control.Dsl.Return
>>> import Control.Dsl.Yield
>>> import Control.Dsl.Empty
>>> :{
earlyGenerator :: Bool -> [String] !! Integer
earlyGenerator earlyReturn = do
  Yield "inside earlyGenerator"
  when earlyReturn $ do
    Yield "early return"
    return 1
  Yield "normal return"
  return 0
:}
>>> :{
earlyGeneratorTest :: [String]
earlyGeneratorTest = do
  Yield "before earlyGenerator"
  i <- Shift $ earlyGenerator True
  Yield "after earlyGenerator"
  Yield $ "the return value of earlyGenerator is " ++ show i
  empty
:}
>>> earlyGeneratorTest
["before earlyGenerator","inside earlyGenerator","early return","after earlyGenerator","the return value of earlyGenerator is 1"]

Constructors

Shift (r0 !! a) 
Instances
Dsl (Shift r) r a Source # 
Instance details

Defined in Control.Dsl.Shift

Methods

cpsApply :: Shift r r0 a -> r !! a Source #