functional-programming - 具有相同字段的两条记录的模式匹配

标签 functional-programming record elm

假设我有这个记录:

type alias Rec = { a : Int }

例如,一个函数接受其中两个并将它们的整数相加。
f: Rec -> Rec -> Int

这可以使用记录访问器(即 f x y = x.a + y.a )来实现,但是有没有办法使用模式匹配来提取两个整数?

显然,这两个不起作用,因为它们会将两个不同的数字绑定(bind)到同一个变量:
f {a} {a} = a + a

f x y = case (x, y) of ({a}, {a}) -> a + a

最佳答案

当前的 Elm 语言中似乎没有这种方式。在 ML 和 Haskell 等其他函数式语言中,您可以在记录中编写模式,例如:

$ sml
Standard ML of New Jersey v110.74 [built: Sat Oct  6 00:59:36 2012]
- fun func {field=x} {field=y} = x+y ;
val func = fn : {field:int} -> {field:int} -> int
- func {field=123} {field=45} ;
val it = 168 : int

您不妨向 Elm 的开发人员提出功能请求 - 或在 community mailing list 中提问。至少。

附言经过快速搜索,我找到了这样一个proposal在 Elm 的记录字段上添加类似 ML 的模式匹配,但它似乎已被拒绝。:-(

关于functional-programming - 具有相同字段的两条记录的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38098933/

相关文章:

functional-programming - 如何使用 S、K 和 I 组合器编写一个空列表?

iphone - 将音频录制到 NSData

Typescript:如何从具有映射/记录类型值的类属性返回特定类型?

javascript - Elm 中的并发

elm - 有没有办法在 Elm-Html 中生成一个空的 Html 节点?

parsing - 深度扩展解析器库的方法

javascript - 获取 Ramda 中管道的先前值

javascript - 高效/优雅地垂直对数组(矩阵)求和

function - Clojure 记录实现 IFn 是一个好习惯吗?

elm - 无法读取未定义的属性 'kids' - 或者如何打破 Elm 中信号的循环依赖关系?