'.++'的固定签名缺少附带绑定

use*_*628 3 haskell

infixr 5 .++
Run Code Online (Sandbox Code Playgroud)

我在ghci中这样做,它给出了错误消息.

<interactive>:26:10: error:
    The fixity signature for ‘.++’ lacks an accompanying binding
Run Code Online (Sandbox Code Playgroud)

我该如何解决?谢谢!

Wil*_*sem 6

就像错误所说,你确实定义了固定性,但你仍然需要定义签名和实现.否则,实际上没有运算符(或者至少我们不能使用这样的运算符,这通常是为什么声明这样的运算符).由于Haskell本身可以导出签名,因此严格来说签名不是必需的(尽管建议编写签名因为它可能是"顶级函数").

例如:

infixr 5 .++
(.++) :: [a] -> [a] -> [a]
(.++) = (++)
Run Code Online (Sandbox Code Playgroud)

这里第二行是签名,第三行是实现.当然,您可以选择另一个签名和实现.

如果在解释器中运行它,则需要在同一个" 语句 "中定义所有这些.您可以通过对行进行分组来实现,例如使用:{:}命令:

Prelude> :{
Prelude| infixr 5 .++
Prelude| (.++) :: [a] -> [a] -> [a]
Prelude| (.++) = (++)
Prelude| :}
Run Code Online (Sandbox Code Playgroud)