我已经开始通过http://www.cs.nott.ac.uk/~pszgmh/monads学习函数式编程课程的介绍。有什么比实际尝试和测试代码更好的方式来尝试和理解事物。
唉,在第二页上我遇到以下内容:
data Expr = Val Int | Div Expr Expr
eval :: Expr -> Int
eval (Val n) = n
eval (Div x y) = eval x `div` eval y
当我尝试运行它时会产生错误。我不太确定为什么会这样。当我尝试
eval (Val 4) `div` eval (Val 2)
在 repl 循环中,它工作得很好,但是
eval 4 `div` eval 2
以类型推断错误结束。
当我将定义更新为以下内容时:
data Expr = Val Int | Div Expr Expr
eval :: Expr -> Int
eval (Val n) = n
eval (Div x y) = eval (Val x) `div` eval (Val y)
我在定义中遇到类型错误。第一个定义有什么问题?顺便说一句,该课程使用Hugs。