packages feed

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]