th-utilities-0.1.0.0: test/TH/DeriveSpec.hs
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ViewPatterns #-}
module TH.DeriveSpec (spec) where
import TH.Derive
import TH.DeriveSpec.TH
import Test.Hspec
data Foo = Foo
data X = X
data Y = Y | Z
$($(derive [d|
instance InstShowBlind Foo
instance InstShowConst X where
constResult _ = "wow!"
instance InstEqBy Y Bool where
toEq Y = True
toEq Z = False
|]))
spec = describe "Instantiators" $ do
it "InstShowBlind" $ do
show Foo `shouldBe` "ShowBlind"
it "InstShowConst" $ do
show X `shouldBe` "wow!"
it "InstEqBy" $ do
(Y == Z) `shouldBe` False
(Z == Z) `shouldBe` True