我在寻找 seq
的定义并遇到了这种奇怪的事情。为什么所有这些函数都有相同/相似的定义?
seq :: a -> b -> b
seq = let x = x in x
inline :: a -> a
inline = let x = x in x
lazy :: a -> a
lazy = let x = x in x
源代码中还有更多具有此定义的内容。这是怎么回事?
最佳答案
发生的事情是这些功能无法在 Haskell 中实现,但它们应该出现在文档中。由于haddock
每个签名都需要一个语法正确(并且类型正确)的定义,源必须包含虚拟定义。此外,在它们被定义的地方(在 ghc-prim
包中),error
(因此 undefined
)尚不可用,因此更明显的 seq = error "Not implementable in Haskell"
不能使用,因此是循环定义。
关于haskell - 浏览前奏的源代码会产生怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8652368/