haskell - Haskell错误我该如何解决
问题描述
编译时在我的 Haskell 代码上收到此错误消息:
H5-1.hs:11:28: error:
parse error on input ‘=’
Perhaps you need a 'let' in a 'do' block?
e.g. 'let x = 5' instead of 'x = 5'
|
11 | show (Blattwert(a))= "show a" |
这是原始代码:
class ToDouble a
where toDouble :: a -> Double
我该如何解决这个问题?
data Op = Plus | Minus | Mal | Geteilt
deriving (Show, Eq)
data RechenBaum = BlattWert Double | AstOp RechenBaum Op RechenBaum
deriving Show
instance ToDouble (RechenBaum) where
show (Blattwert(a))= "show a"
toDouble(AstOp (Rechenbaum (a) Op(b) Rechenbaum(c)))=
ToDouble (AstOp (Rechenbaum (a) Op(Plus) Rechenbaum(c)))= RechenBaum(a)+ Rechenbaum(c)
ToDouble (AstOp (Rechenbaum (a) Op(Minus) Rechenbaum(c)))= RechenBaum(a) - Rechenbaum(c)
ToDouble (AstOp (Rechenbaum (a) Op(Mal) Rechenbaum(c)))= RechenBaum(a)*Rechenbaum(c)
ToDouble (AstOp (Rechenbaum (a) Op(Geteilt) Rechenbaum(c)))= RechenBaum(a) /Rechenbaum(c)
解决方案
存在许多问题,但编译器目前正在抱怨您尝试定义show
:
instance ToDouble (RechenBaum) where
show (Blattwert(a))= "show a"
该函数
show
不是该类的成员,ToDouble
因此您不能在ToDouble
实例的 where 块中定义它。您正在使用一些奇怪的语法进行模式匹配。不要
Rechenbaum(a)
而是相反(Rechenbaum a)
。编辑:Rechenbaum 甚至不是构造函数,所以不要这样使用它。如果您想要一个与任何构造函数匹配的变量,请使用a
其中一个构造函数或模式匹配。你的用途也是如此,Op
它不是构造函数。没有命名数据构造函数
ToDouble
,因此您toDouble
在实例内部的定义根本没有意义。构造函数
RechenBaum
将产生一个类型的值,RechenBaum
而不是Double
在右边使用它toDouble
没有多大意义。实际上,现在我看起来没有RechenBaum
构造函数,所以这样使用它本身就是一个错误——该类型的构造函数被命名为BlattWert
andAstOp
。有时您使用
RechenBaum
和其他时间Rechenbaum
- 这些是不同的符号。
推荐阅读
- servlets - 带有 log4j2 的 Zalando 日志
- python - FreeCAD 选择所有没有 Gui 的对象
- c# - TimeSpan 非常灵活的字符串格式
- php - 为什么在 Netbeans 中创建新项目后没有显示 index.php 文件?
- xamarin.forms - Xamarin 显示/隐藏密码
- reactjs - 此人员选取器的 defaultSelectedUser 属性的格式是什么?
- c# - 以编程方式获取 Microsoft Azure 的“始终开启”属性
- html - 在开发人员控制台中进行的更改在 angular mat-form-field 中的本地不起作用
- php - 无法使用 php html 在网格中显示图像
- javascript - 使用“esm”支持原生 ES6 模块的 Mocha 测试