我想在严格的上下文中使用Haskell的存在类型(http://www.haskell.org/haskellwiki/Existential_type).我从haskell-wiki中获取了示例,并尝试使用它创建一个严格的异构映射.需要对地图及其值进行全面评估.
我定义了3种类型来测试它.第一个只是一个简单的严格地图.第二种类型是使用存在类型的异构映射.第三种类型与第二种类型相似,但增加了NFData约束.
虽然第一个简单的例子是真正严格的并且得到了充分的评估,但其他的却不是.即使是使用deepseq的第三种类型,似乎也没有得到充分的评估.
我的问题是:
示例来源
{-# LANGUAGE ExistentialQuantification #-}
import GHC.AssertNF
import Control.DeepSeq
import Data.Map.Strict
-- 1) simple container
data Obj a = Obj a
-- using a smart constructor here to ensure arbitrary values are strict
mkObj :: a -> Obj a
mkObj a = Obj $! a
-- using a special String constructor to ensure Strings are always
-- fully evaluated in this example
mkString :: String -> String
mkString …Run Code Online (Sandbox Code Playgroud)