仅映射值,而不是键值对fmap
的实现: . 您可以对值进行查找和替换,如下所示:DA.Next.Map.Map
fmap : (v -> w) -> Map k v -> Map k w
import DA.Next.Map as M
data OneElement = OneElement with
t : Text
i : Int
deriving (Eq, Show)
mymap : Map Text OneElement = M.fromList [("0001", OneElement "one" 1), ("0002", OneElement "two" 2), ("0003", OneElement "three" 3), ("0004", OneElement "four" 4)]
result = fmap (\i -> if i == OneElement "one" 1 then OneElement "somethingelse" 1111 else i) mymap
请注意,我已将您重命名map
为mymap
,因为map
与标准库函数重叠map: (a -> b) -> [a] -> [b]
。
如果您想在类似 map 的函数中获得键值对,您可以编写自己的 map 函数:
import DA.Next.Map as M
data OneElement = OneElement with
t : Text
i : Int
deriving (Eq, Show)
mapEntries : MapKey k => ((k, v) -> w) -> Map k v -> Map k w
mapEntries f = M.fromList . map (\e -> (e._1, f e)) . M.toList
mymap : Map Text OneElement = M.fromList [("0001", OneElement "one" 1), ("0002", OneElement "two" 2), ("0003", OneElement "three" 3), ("0004", OneElement "four" 4)]
result = mapEntries (\(k, v) -> if k == "0001" then OneElement "somethingelse" 1111 else v) mymap
但是,看起来您想要做的只是替换 key 处的元素"0001"
。为此,您insert
拥有.DA.Next.Map
import DA.Next.Map as M
data OneElement = OneElement with
t : Text
i : Int
deriving (Eq, Show)
mymap : Map Text OneElement = M.fromList [("0001", OneElement "one" 1), ("0002", OneElement "two" 2), ("0003", OneElement "three" 3), ("0004", OneElement "four" 4)]
result = insert "0001" (OneElement "somethingelse" 1111) mymap