运行简单的Haskell程序时解析错误

时间:2014-10-31 15:19:48

标签: haskell

我刚开始学习Haskell。我开始编写一个简单的函数,它接受两个值n和x,然后显示两个用它计算的整数值。

test n x = do
    cell1 = round(n*n*x)
    cell2 = n*n - cell1
    print cell1
    print cell2

但是它没有运行并且在输入`='错误时不断给出 Parse错误。发生了什么事?

1 个答案:

答案 0 :(得分:4)

你遇到Monads的第一个麻烦。您可能需要的是let

中的do语句
test n x = do
    let cell1 = round (n * n * x)
        cell2 = n * n - cell1
    print cell1
    print cell2

此处的不同之处在于,您无法直接在do块内部进行分配,因为所有do块都会阻止对>>=>>的调用。 let语句允许您在函数定义中定义本地值,如

f x =
    let y = 2 * x
        z = y * y * y
    in z + z + y

你的功能desugar的方式就像

test n x =
    let cell1 = round (n * n * x)
        cell2 = n * n - cell1
    in (print cell1 >> print cell2)

>>只将两个monadic动作链接在一起。请注意,这并不是它如何去除,我选择了一个在这种情况下等效的表示,但它并不完全是编译器实际生成的。