gpt4 book ai didi

Haskell前奏: definition of seq

转载 作者:行者123 更新时间:2023-12-02 18:40:00 26 4
gpt4 key购买 nike

definition of the haskell prelude我们看到 ... 是为无法在 Haskell 中实现的表达式保留的。例如,现在 IO monad 无法在 haskell 中实现。

令我惊讶的是,序言中seq的定义如下

seq :: a -> b -> b
seq = ... -- Primitive

为什么不是下面的呢?我错过了什么?

seq _ b = b

最佳答案

正如您在 Haskell Wiki entry on seq 中看到的那样,seq 函数必须满足以下两个方程:

⊥ `seq` b = ⊥
a `seq` b = b

(其中 是未定义值,这是非终止函数应用程序或诸如 hd []undefined 之类的东西的评估结果逻辑上)

您的定义显然不满足第一个方程。

seq 的典型用例是在评估第二个参数之前强制评估第一个参数(弱头范式)。 (尽管严格来说,seq 并不能保证这一点;再次参见 wiki 文章)

据我所知,这样的函数在没有任何编译器扩展(例如 -XBangPatterns)的情况下无法在纯 Haskell 中定义。

关于Haskell前奏: definition of seq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34575816/

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