module Main where import Control.Lens import Control.Monad.Reader (runReader) import Control.Monad.State (evalState) import Test.Hspec hiding (runIO) import Test.Hspec.Core.Spec (SpecM) import Types main :: IO () main = hspec $ tests tests :: SpecM () () tests = do it "runs a test" $ do 1 `shouldBe` 1 it "sees some state" $ do evalState (use foo) (T 5 'r') `shouldBe` 5 it "sees T using MonadReaders class and lens" $ do runReader monadReaders1 (T 5 'r') `shouldBe` 5 it "sees T using MonadReaders class and modified lens" $ do runReader monadReaders2 (T 5 'r') `shouldBe` 5 it "sees T using MonadStates class" $ do evalState monadStates1 (T 5 'r') `shouldBe` 5