在Haskell中,是否存在数据类型的情况
{-# LANGUAGE BangPatterns #-}
import Control.DeepSeq
data D = D Int
Run Code Online (Sandbox Code Playgroud)
实例
instance NFData D where
rnf (D !_) = ()
Run Code Online (Sandbox Code Playgroud)
可以与具有另一个外部的实例具有不同的效果!:
instance NFData D where
rnf !(D !_) = ()
Run Code Online (Sandbox Code Playgroud)
我的研究:
let绑定(如此答案),我认为不适用于函数模式匹配这样.https://prime.haskell.org/wiki/BangPatterns#Thebasicidea说
只有在变量或外卡模式之前,爆炸才真正有效
和
在强迫评估的模式之前发出一声巨响无论如何都没有
而且我想
rnf (D _) 无论如何已经迫使评估
rnf x = case x of D _ -> ...rnf !(D _)会产生同样的效果rnf (D _)rnf !(D !_)必须具有相同的效果rnf (D !_)所以我认为不,这两个总是相同的 …