packages feed

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