packages feed

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