相关疑难解决方法(0)

seq force如何运作?

背景

这个问题源于一个挑战布伦特Yorgey提出在OPLSS:写一个函数f :: (Int -> Int) -> Bool区分f undefinedf (\x -> undefined).我们所有的答案要么被使用,seq要么类似于令人厌恶的爆炸模式seq.例如:

f :: (Int -> Int) -> Bool
f g = g `seq` True

*Main> f undefined
*** Exception: Prelude.undefined
*Main> f (\x -> undefined)
True
Run Code Online (Sandbox Code Playgroud)

GHC评上seq说,

e1 `seq` e2 
Run Code Online (Sandbox Code Playgroud)

过去常见的

case e1 of { _ -> e2 }
Run Code Online (Sandbox Code Playgroud)

所以我尝试了手工制作.它不起作用:

f' g = case g of { _ -> True }

*Main> f' undefined
True
*Main> …
Run Code Online (Sandbox Code Playgroud)

evaluation haskell lazy-evaluation semantics

26
推荐指数
2
解决办法
2888
查看次数

标签 统计

evaluation ×1

haskell ×1

lazy-evaluation ×1

semantics ×1