gpt4 book ai didi

Haskell 组合 (.) 与 F# 的管道前向运算符 (|>)

转载 作者:行者123 更新时间:2023-12-03 04:53:53 27 4
gpt4 key购买 nike

在 F# 中,使用管道转发运算符 |> 非常常见。然而,在 Haskell 中,我只见过使用函数组合 (.)。我明白他们是related ,但是是否有语言原因导致 Haskell 中不使用管道转发,或者是其他什么原因?

最佳答案

在 F# 中 (|>) 很重要,因为从左到右的类型检查。例如:

List.map (fun x -> x.Value) xs

通常不会进行类型检查,因为即使 xs 的类型已知,lambda 的参数 x 的类型在执行时也是未知的。 typechecker 看到了它,所以它不知道如何解析 x.Value

相反

xs |> List.map (fun x -> x.Value)

可以正常工作,因为 xs 的类型将导致 x 的类型已知。

由于 x.Value 等构造中涉及名称解析,因此需要从左到右进行类型检查。西蒙·佩顿·琼斯 (Simon Peyton Jones) 撰写了 proposal为 Haskell 添加类似的名称解析,但他建议使用局部约束来跟踪类型是否支持特定操作。因此,在第一个示例中,x 需要 Value 属性的要求将继续下去,直到看到 xs 并且可以解决此要求。不过,这确实使类型系统变得复杂。

关于Haskell 组合 (.) 与 F# 的管道前向运算符 (|>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1457140/

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