imperative-edsl-0.4.1: tests/Semantics.hs
import Language.Embedded.Expression (evalExp)
import Language.Embedded.Imperative
import Language.Embedded.CExp
-- Test that `modifyRef` doesn't loop. It will loop if evaluation of `setRef` is
-- too lazy so that the `unsafeFreezeRef` happens before `setRef` in
-- `modifyRef`.
modifyRefProg :: Program (RefCMD CExp) (CExp Int32)
modifyRefProg = do
r <- initRef 0
modifyRef r (+1)
getRef r
testModifyRef = do
1 <- fmap evalExp $ runIO modifyRefProg
return ()
main = do
testModifyRef