以下语法是定义作用于模块或where子句中的函数的常用方法。
add :: Int -> Int -> Int
add x y = x + y
但是,它在记录内部不起作用。至少在默认情况下,这在语法上是无效的
data RecordWithFunc = RecordWithFunc { func :: Int -> Int -> Int}
a :: RecordWithFunc
a = RecordWithFunc {
func x y = x + y
}
这是GHC前端产生解析错误的示例
$ runhaskell /tmp/hask.hs
/tmp/hask.hs:5:10: error: parse error on input ‘x’
|
5 | func x y = x + y
| ^
是否有语法扩展名可以使参数出现在字段名称之后?
最佳答案
不,没有这样的扩展名。 (虽然会很好!)执行此操作的通常方法是说:
a :: RecordWithFunc
a = RecordWithFunc {
func = \x y -> x + y
}
甚至在这种情况下:
a :: RecordWithFunc
a = RecordWithFunc {
func = (+)
}