packages feed

polysemy-plugin-0.2.0.1: test/LegitimateTypeErrorSpec.hs

{-# OPTIONS_GHC -fdefer-type-errors -fno-warn-deferred-type-errors #-}

module LegitimateTypeErrorSpec where

import Polysemy
import Test.Hspec
import Test.ShouldNotTypecheck

wrongLift :: Member (Lift IO) r => Sem r ()
wrongLift = sendM putStrLn

wrongReturn :: Sem (e ': r) () -> Sem r ()
wrongReturn = reinterpret undefined



spec :: Spec
spec = do
  describe "Legitimate type errors" $ do
    it "should be caused by `sendM`ing an unsaturated function" $
        shouldNotTypecheck wrongLift

    it "should be caused by giving a bad type to reinterpret" $
        shouldNotTypecheck wrongReturn