gpt4 book ai didi

haskell - 记录内紧凑函数定义的语法扩展

转载 作者:行者123 更新时间:2023-12-02 12:04:32 25 4
gpt4 key购买 nike

以下语法是定义作用域为模块或在 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 = (+)
}

关于haskell - 记录内紧凑函数定义的语法扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54263748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com