Haskell二叉树定义出现解析错误,求原因及解决办法
Haskell代码解析错误原因分析
你的代码问题出在多余的构造器类型签名:
Haskell中定义代数数据类型时,data声明会自动为构造器生成对应的类型,不需要手动重复声明。你在data BT a = Empty | Fork a (BT a) (BT a)之后额外添加的:
Empty :: BT a Fork :: a -> BT a -> BT a -> BT a
属于语法冗余,编译器无法识别这种写法,因此抛出parse error on input '::'。
当你添加deriving (show)(注意正确写法是首字母大写的Show)后,错误变为parse error on input 'Empty',本质还是因为后面多余的构造器声明破坏了data语句的语法结构——deriving子句应该是data声明的最后一部分,后面不能再跟构造器的类型签名。
修正后的代码
如果需要让类型支持打印,正确写法是:
data BT a = Empty | Fork a (BT a) (BT a) deriving (Show)
内容的提问来源于stack exchange,提问作者hask1023
相关产品推荐
相关产品推荐

