Haskell:let 语句有问题

use*_*252 2 syntax parsing haskell

我正在尝试在 Haskell 中编写一个函数,并且尝试用两个 let 开始该函数,然后是答案。

split :: (a -> b) -> (a -> c) -> a -> (b, c)
split x y z = 
    let first = ( x (y))
    let last = ( y (Z))
    (first, last)
Run Code Online (Sandbox Code Playgroud)

从第二个 let 语句开始,我收到“输入‘let’时出现解析错误”。这是为什么?我该如何解决这个问题?

Tho*_*son 6

split :: (a -> b) -> (a -> c) -> a -> (b, c)
Run Code Online (Sandbox Code Playgroud)

a这表示您的第一个参数是从某种类型到某种类型的函数,第二个参数是从某种类型到某种类型的b函数。ac

split x y z = 
Run Code Online (Sandbox Code Playgroud)

所以x :: a -> by :: a -> c.

    let first = ( x (y))
Run Code Online (Sandbox Code Playgroud)

这意味着您正在尝试将该函数应用于,x但这y不起作用,因为x需要类型为 的参数a并且y类型为a -> c。这是错误的。

    let last = ( y (Z))
Run Code Online (Sandbox Code Playgroud)

没有Z,检查你的大小写。

    (first, last)
Run Code Online (Sandbox Code Playgroud)

从语法上来说,你需要一个in. 语法是:

let var1 = expr1
    var2 = expr2
in expr3WithVars1And2InScope
Run Code Online (Sandbox Code Playgroud)

一个小例外:当使用do块时,您不使用它in,因为它隐式是块的其余部分do