packages feed

polysemy-plugin-0.2.3.0: test/LegitimateTypeErrorSpec.hs

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

module LegitimateTypeErrorSpec where

import Polysemy
import Test.Hspec
import Test.ShouldNotTypecheck

wrongEmbed :: Member (Embed IO) r => Sem r ()
wrongEmbed = embed putStrLn

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



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

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