packages feed

freer-0.2.2.1: tests/Tests/State.hs

{-# LANGUAGE FlexibleContexts #-}
module Tests.State (
  testPutGet,
  testPutGetPutGetPlus,
  testGetStart
) where

import Control.Monad.Freer
import Control.Monad.Freer.State

testPutGet :: Int -> Int -> (Int,Int)
testPutGet n start = run (runState go start)
  where go = put n >> get

testPutGetPutGetPlus :: Int -> Int -> Int -> (Int,Int)
testPutGetPutGetPlus p1 p2 start = run (runState go start)
  where go = do
          put p1
          x <- get
          put p2
          y <- get
          return (x+y)

testGetStart :: Int -> (Int,Int)
testGetStart = run . runState get