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)
我该如何解决?谢谢!
就像错误所说,你确实定义了固定性,但你仍然需要定义签名和实现.否则,实际上没有运算符(或者至少我们不能使用这样的运算符,这通常是为什么声明这样的运算符).由于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)