You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定义包含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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 14:47:44