packages feed

polysemy-1.3.0.0: test/LawsSpec.hs

module LawsSpec where

import Polysemy
import Polysemy.Law
import Polysemy.State
import Polysemy.State.Law
import Test.Hspec

spec :: Spec
spec = parallel $ do
  describe "State effects" $ do
    it "runState should pass the laws" $
      property $ prop_lawfulState @'[] $ fmap snd . runState @Int 0

    it "runLazyState should pass the laws" $
      property $ prop_lawfulState @'[] $ fmap snd . runLazyState @Int 0

    it "stateToIO should pass the laws" $
      property $ prop_lawfulState @'[Embed IO] $ fmap snd . stateToIO @Int 0