You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:45:35