如何定义包含HashMap Text Text构造器的Sum Type并解决类型检查错误
解决Haskell中HashMap作为Sum Type构造器参数的类型错误
我来帮你搞定这个问题!你遇到的错误根源在于HashMap本身是一个多参数类型构造器(它的kind是* -> * -> *)——简单说就是它需要两个具体的类型参数,才能变成一个可以直接使用的完整类型。你在VMap构造器里只写了HashMap,但编译器期望的是已经填好参数的完整类型,也就是HashMap Text Text。
直接修正后的代码如下:
import Data.HashMap.Strict (HashMap) -- from unordered-containers import Data.Text data Value = VText Text | VList [Text] | VMap (HashMap Text Text) -- 这里补上HashMap需要的两个Text参数,括号可选但能提升可读性 deriving Show
额外小提示
如果之后你需要让VMap支持更灵活的键值类型,也可以把Value定义成带类型参数的通用版本:
import Data.HashMap.Strict (HashMap) import Data.Text data Value k v = VText Text | VList [Text] | VMap (HashMap k v) deriving Show
这样你就能创建比如Value Text Int(键是Text,值是Int)或者Value String Text这类自定义的Value类型了。不过如果你的需求就是固定键值都为Text,那第一种写法完全够用。
内容的提问来源于stack exchange,提问作者Jivan
相关产品推荐
相关产品推荐

