packages feed

multi-except-1.0.0: test/Test/MultiExcept/Alt.hs

module Test.MultiExcept.Alt
  ( spec
  ) where

import Test.Hspec

import Prelude (Int, ($))
import Control.Applicative (Applicative(..))
import Data.Functor.Alt
import Control.Applicative.MultiExcept
import Control.Applicative.MultiExcept.Alt ()

spec :: Spec
spec = describe "Alt instance" $ do
  it "propagates left succeed" $ do
    succeed 1 <!> throwError () `shouldBe` succeed (1 :: Int)
  it "propagates right succeed" $
    throwError () <!> succeed 1 `shouldBe` succeed (1 :: Int)
  it "prioritizes left succeed" $
    succeed 1 <!> succeed 2 `shouldBe` (succeed 1 :: MultiExcept () Int)
  it "propagates both errors" $ do
    throwError 1 <!> throwError 2 `shouldBe` (throwError 1 *> throwError 2 :: MultiExcept Int ())