Hs2lib-0.4.8: Tests/Src/Test_StateDemo.hs
{- @@ IMPORT "Data.IORef" "Foreign.StablePtr" @@ -}
module Tests.Src.Test_StateDemo where
import Foreign.StablePtr
import Data.IORef
type Context a = StablePtr (IORef a)
type Env = Context [Int]
-- @@ Export
initEnv :: IO Env
initEnv = newStablePtr =<< newIORef []
-- @@ Export
freeEnv :: Env -> IO ()
freeEnv = freeStablePtr
-- @@ Export
add :: Env -> Int -> IO ()
add env val
= do env_value <- deRefStablePtr env
modifyIORef env_value ((val:) $!)
-- @@ Export = sumPrime
sum' :: Env -> IO Int
sum' env
= do env_value <- deRefStablePtr env
current <- readIORef env_value
return $ sum current
main :: IO Int
main
= do env <- initEnv
add env 1
add env 1
add env 1
add env 1
val <- sum' env
freeEnv env
return val