{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -fdefer-type-errors -fno-warn-deferred-type-errors #-}
module BadSpec where
import Polysemy
import Polysemy.State
import Test.Hspec
import Test.ShouldNotTypecheck
data KVStore k v m a where
GetKV :: k -> KVStore k v m (Maybe v)
makeSem ''KVStore
positivePos :: Member (KVStore k v) r => Sem r (Maybe v)
positivePos = do
getKV "hello"
negativePos :: Member (KVStore String v) r => Sem r (Maybe Bool)
negativePos = do
getKV "hello"
badState :: Member (State a) r => Sem r ()
badState = put ()
spec :: Spec
spec = do
describe "incorrectly polymorphic constraint" $ do
it "should not typecheck in positive position" $ do
shouldNotTypecheck positivePos
it "should not typecheck in negative position" $ do
shouldNotTypecheck negativePos
it "should not typecheck badly polymorphic State" $ do
shouldNotTypecheck badState