小编Chr*_*ris的帖子

如何定义严格的存在类型?

我想在严格的上下文中使用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)

haskell existential-type

4
推荐指数
2
解决办法
272
查看次数

标签 统计

existential-type ×1

haskell ×1