Сигнатура может сбить вас с толку, поскольку она не ограничивается слиянием с новым Dict
, а может, например, слиться в список пар ключ-значение.При чтении подписи в вашем случае вы можете заменить result
на Dict comparable c
.или даже используйте Int
вместо a
, b
и c
.
Редактировать: Для удобства пользования подпись:
merge :
(comparable -> a -> result -> result)
-> (comparable -> a -> b -> result -> result)
-> (comparable -> b -> result -> result)
-> Dict comparable a
-> Dict comparable b
-> result
-> result
При использовании, чтобы вернуть новый Dict
, мы должны передать его Dict.empty
как начальное значение и вставить значения в словарь в каждой функции самостоятельно, например:
dictA =
Dict.fromList [ ( "normal", 0.5 ), ( "fire", 2 ) ]
dictB =
Dict.fromList [ ( "water", 0.5 ), ( "fire", 2 ) ]
merged =
Dict.merge
(\key a -> Dict.insert key a)
(\key a b -> Dict.insert key (a + b))
(\key b -> Dict.insert key b)
dictA
dictB
Dict.empty