В haskell можно сделать следующее.Обновление вложенных карт в scala
import Control.Lens
import qualified Data.Map as M
m :: Map Int (Map Int String)
m = M.empty & at 1 . non M.empty . at 2 .~ Just "one-two"
Возможно ли сделать что-то подобное в scala? Может быть, использовать скалаз? Я имею в виду обновление вложенной карты со значением по умолчанию.
Обновление: Хорошо, мы можем как минимум создать функцию обновления значения на карте без указания всех задействованных типов. Имею функцию как это.
// modifyMap :: (k, v) -> (v -> v) -> Map k v -> Map k v
def modifyMap[K,V](k: K, v: V)(f: V => V)(m: Map[K,V]): Map[K,V] = {
m + (k -> f(m.getOrElse(k, v)))
}
И я хотел бы иметь возможность составлять эту функцию в том, что кажется разумным способом.
// (modifyMap (1, M.empty) . modifyMap (2, "")) (const "one-two") M.empty
(modifyMap(1, Map.empty) compose modifyMap(2, ""))(_ => "one-two")(Map.empty)
Это в основном то же, что и пример haskell, но тип просто не будет получен, если вы не будете полностью указаны.
да, http://eed3si9n.com/learning- scalaz/Lens.html – Peter