tvd*_*tvd 4 haskell functional-programming
我正在研究一个可以计算表达式中使用的运算符数量的函数.我的代码如下:
data Expr = Lit Int |
Expr :+: Expr |
Expr :-: Expr
size :: Expr -> Int
size (Lit n) = 0
size (e1 :+: e2) = 1 + (size e1) + (size e2)
size (e1 :-: e2) = 1 + (size e1) + (size e2)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用Hugs98执行此代码时,我收到以下错误:
Main> size 2+3
ERROR - Cannot infer instance
*** Instance : Num Expr
*** Expression : size 2 + 3
Run Code Online (Sandbox Code Playgroud)
谁能告诉我我做错了什么?我真的不在乎自己.
2+3不是一个有效的表达.对于您的类型,使用Lit数据构造函数创建原始值,有效运算符为:+:和:-:.所以你真正需要的是Lit 2 :+: Lit 3.所以试试吧
size (Lit 2 :+: Lit 3)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1397 次 |
| 最近记录: |