{-# LANGUAGE DataKinds #-} {-# OPTIONS -fplugin=Overloaded -fplugin-opt=Overloaded:Numerals #-} module Overloaded.Test.Numerals where import Data.Bin (Bin, BinP) import Data.Fin (Fin (..)) import Test.Tasty (TestTree, testGroup) import Test.Tasty.HUnit (testCase, (@?=)) import qualified Data.Bin as B import qualified Data.BinP as BP import qualified Data.Type.Nat as N tests :: TestTree tests = testGroup "Numerals" [ testCase "Fin" $ do let f :: Fin (N.FromGHC 5) f = 2 f @?= FS (FS FZ) , testCase "Fin pattern-match" $ do let res = case 2 :: Fin (N.FromGHC 5) of 2 -> True -- works, because there is @Num (Fin n)@ instance _ -> False res @?= True , testCase "Data.Bin" $ do let b :: Bin b = 0 b @?= B.fromNatural 0 , testCase "Data.BinP" $ do let b :: BinP b = 1 b @?= BP.fromNatural 1 ]