import Data.Monoid import Optional import Test.Hspec main :: IO () main = hspec $ do describe "Sum" $ do it "1 + 1 is 2" $ do Only (Sum 1) `mappend` Only (Sum 1) `shouldBe` Only (Sum {getSum = 2}) describe "Product" $ do it "4 * 2 is 8" $ do Only (Product 4) `mappend` Only (Product 2) `shouldBe` Only (Product {getProduct = 8}) describe "Sum with Nada" $ do it "1 + Nada is 1" $ do Only (Sum 1) `mappend` Nada `shouldBe` Only (Sum {getSum = 1}) describe "List" $ do it "[1] <> Nada is [1]" $ do Only [1] `mappend` Nada `shouldBe` Only [1] describe "Nada with sum" $ do it "Nada + 1 is 1" $ do Nada `mappend` Only (Sum 1) `shouldBe` Only (Sum {getSum = 1})