我正在学习haskell。当我编译代码时:
data Bintree a = Nulltree | Node (Bintree a) a (Bintree a)
Nulltree :: Bintree a
我收到以下错误:
Invalid type signature: Nulltree :: Bintree a Should be of form <variable> :: <type>
因此,如何防止这种情况。我试着写:
data Bintree a = Nulltree | Node (Bintree a) a (Bintree a)
Nulltree :: a -> Bintree a
但这给出了相同的错误。
最佳答案
在标准的Haskell中,不能将类型签名提供给数据构造函数。线
data Bintree a = Nulltree | Node (Bintree a) a (Bintree a)
表示
Nulltree :: BinTree a
。您不需要自己说,也不能。使用GADTSyntax
语言扩展名,您可以改为编写data Bintree a where
Nulltree :: BinTree a
Node :: Bintree a -> a -> Bintree a -> Bintree a
(感谢chi指出
GADTSyntax
就足够了,并且不需要对初学者友好的GADTs
扩展名。)