我正试图用Haskell来获取GADT的概念,并试图遵循Peano Number的情况,
{-# LANGUAGE GADTs, KindSignatures, DataKinds #-}
module Data.GADTTest where
data Height = Zero | Inc Height deriving (Show, Eq)
data TestGADT :: Height -> * where
TypeCons1 :: TestGADT Zero
TypeCons2 :: Int -> TestGADT h -> TestGADT (Inc h)
testFunc :: TestGADT h -> TestGADT h -> Int
testFunc TypeCons1 TypeCons1 = 1
testFunc (TypeCons2 {}) (TypeCons2 {}) = 2
Run Code Online (Sandbox Code Playgroud)
但是,我发现当我使用-fwarn-incomplete-patterns标志(GHC-7.6.3)编译它时,它给了我以下警告,即使所有可能的模式都已满足:
Pattern match(es) are non-exhaustive
In an equation for `testFunc':
Patterns not matched:
TypeCons1 (TypeCons2 …Run Code Online (Sandbox Code Playgroud)