multi-except-0.2.1.0: test/Test/Alt.hs
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE TypeApplications #-}
module Test.Alt
( spec
) where
import Test.Hspec
import Data.Functor.Alt
import Control.Applicative.MultiExcept
spec :: Spec
spec = describe "Alt instance" $ do
it "propagates left succeed" $
succeed 1 <!> throwError 3 `shouldBe` succeed 1
it "propagates right succeed" $
throwError () <!> succeed 1 `shouldBe` succeed 1
it "prioritizes left succeed" $
succeed 1 <!> succeed 2 `shouldBe` succeed @() 1
it "propagates both errors" $ do
throwError 1 <!> throwError 2`shouldBe` throwErrors @() [1, 2]