Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 带HashMap的Sum类型_Haskell_Hashmap_Algebraic Data Types_Sum Type - Fatal编程技术网

Haskell 带HashMap的Sum类型

Haskell 带HashMap的Sum类型,haskell,hashmap,algebraic-data-types,sum-type,Haskell,Hashmap,Algebraic Data Types,Sum Type,以下代码触发错误: import Data.HashMap.Strict(HashMap)——来自无序容器 导入数据.Text 数据值= VText文本 |虚拟列表[文本] |VMap哈希映射文本 衍生节目 编译器抱怨: 应为“HashMap”再添加两个参数 应为类型,但“HashMap”的种类为“*->*->*” 在“HashMap”类型中 在数据构造函数“VMap”的定义中 在“值”类型检查的数据声明中 如何创建一个像Value这样的求和类型,其中一个构造函数使用HashMap Text

以下代码触发错误:

import Data.HashMap.Strict(HashMap)——来自无序容器
导入数据.Text
数据值=
VText文本
|虚拟列表[文本]
|VMap哈希映射文本
衍生节目
编译器抱怨:

应为“HashMap”再添加两个参数
应为类型,但“HashMap”的种类为“*->*->*”
在“HashMap”类型中
在数据构造函数“VMap”的定义中
在“值”类型检查的数据声明中

如何创建一个像
Value
这样的求和类型,其中一个构造函数使用
HashMap Text文本

通过使用括号消除
VMap
HashMap
的参数歧义:

data Value =
    VText Text
  | VList [Text]
  | VMap (HashMap Text Text)
  deriving Show

通过使用括号消除
VMap
HashMap
参数的歧义:

data Value =
    VText Text
  | VList [Text]
  | VMap (HashMap Text Text)
  deriving Show

我的印象是,我尝试了每一个可能的括号组合,除了这个特殊的一个。。。大量的thanks@Jivan:如果您发现传统的
数据
语法令人困惑,另一个选项是
{-#Language GADTSyntax#-}
,其中您显式编写每个构造函数的类型:
数据值,其中{VText::Text->Value;VList::[Text]->Value;VMap::HashMap Text->Value;}
。你在原来的帖子中所说的内容相当于说
VMap::HashMap->Text->Text->Value
;如果尝试使用括号,如
HashMap(Text,Text)
HashMap(Text Text)
,则这些括号的意思是
HashMap->(Text,Text)->Value
HashMap->Text Text Text->Value
分别-我希望这能澄清它们不起作用的原因。我的印象是,除了这个特殊的括号外,我尝试了所有可能的括号组合。。。大量的thanks@Jivan:如果您发现传统的
数据
语法令人困惑,另一个选项是
{-#Language GADTSyntax#-}
,其中您显式编写每个构造函数的类型:
数据值,其中{VText::Text->Value;VList::[Text]->Value;VMap::HashMap Text->Value;}
。你在原来的帖子中所说的内容相当于说
VMap::HashMap->Text->Text->Value
;如果您尝试使用括号,例如
HashMap(Text,Text)
HashMap(Text-Text)
,这些括号分别表示
HashMap->(Text,Text)->Value
HashMap->Text-Text->Value
,我希望这能澄清它们不起作用的原因。