Было бы легче ответить, если бы вы предоставили ошибочный код, но, судя по тому, что я могу разобрать, похоже, что вы неправильно понимаете, что такое Map.empty. Map.empty - это не функция, это значение; в частности, это карта, у которой нет содержимого.
Карты - это наборы пар ключ / значение. Один из способов создания карты, которую вы хотите, - это начать с пустой карты и затем добавлять каждый из элементов, которые вы хотите, один за другим. Вот пример:
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.insert), но вместо этого я получил функцию, которая ожидает карту и возвращает другую карту». Это потому, что DAML имеет функцию, называемую automati c currying ; функция Map.insert
определяется как получение ключа, значения и Map и возврат Map. Но вы также можете думать об этом как о получении ключа и возвращении функции, которая принимает значение, которая возвращает функцию, которая принимает Map, которая возвращает Map. Таким образом, если вам не хватает аргумента, указанное выражение c остается действительным, оно просто возвращает функцию, которая по-прежнему ожидает еще один аргумент, а не значение.