Daml Map函数中M.empty的作用是什么?

What is the purpose of M.empty in Daml Map function?

当我使用 Map 函数时,它需要声明 M.empty,如果我遗漏了一个错误,这个 M.empty 用法背后的定义是什么,Map 函数在 DAML 中是如何工作的。

出现如下错误。

** 无法匹配例外类型地图文本 ([a]) 与实际类型 地图文本 ([A]) -> 地图文本 ([A]) **

当我添加 M.Empty 时它不是 运行 到这个 Error.For 我的理解可以解释 Map 是如何工作的以及背后的原因是什么 M.Empty

如果您提供了错误的代码会更容易回答,但从我可以解析的情况来看,您可能误解了 Map.empty 是什么。 Map.empty 不是一个函数,它是一个值;具体来说,就是一个没有内容的Map。

地图是 key/value 对的集合。构建您想要的 Map 的一种方法是从一个空 Map 开始,然后一个接一个地添加您想要的每个元素。这是一个例子:

module Main where

import qualified DA.TextMap as Map

testMaps = scenario do
  let m1 = Map.empty
  let m2 = Map.insert "United States" "USD" m1
  let m3 = Map.insert "France" "EUR" m2
  let m4 = Map.insert "United Kingdom" "GBP" m3
  assert (Map.lookup "France" m3 == Some "EUR")

如果,就行了

  let m3 = Map.insert "France" "EUR" m2

您忘记了 m2,您会收到您所描述的错误消息。此错误消息的意思是“我期望得到一个 Map(Map.insert 函数调用的结果),但我却得到了一个期望 Map 和 returns 另一个 Map 的函数”。这是因为 DAML 有一个叫做 automatic currying 的特性;函数 Map.insert 被定义为获取一个键、一个值和一个 Map,以及 returning 一个 Map。但您也可以将其视为接受一个键,return 一个接受值的函数,return 一个接受 Map 的函数,return 一个 Map。因此,如果您缺少一个参数,特定表达式仍然有效,它恰好 return 一个函数仍然需要一个参数,而不是 returning 一个值。