“。++”的固定性签名缺少随附的绑定

时间:2018-07-23 18:56:24

标签: haskell

infixr 5 .++

我在ghci中执行此操作,并显示错误消息。

<interactive>:26:10: error:
    The fixity signature for ‘.++’ lacks an accompanying binding

我该如何解决?谢谢!

1 个答案:

答案 0 :(得分:6)

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

例如:

infixr 5 .++
(.++) :: [a] -> [a] -> [a]
(.++) = (++)

第二行是签名,第三行是实现。当然,您可以选择其他签名和实现。

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

Prelude> :{
Prelude| infixr 5 .++
Prelude| (.++) :: [a] -> [a] -> [a]
Prelude| (.++) = (++)
Prelude| :}