>>>
: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"]