使用 return Monad 类型的输入函数调用 Map.mapWithKey
Calling Map.mapWithKey with input function that return a Monad type
我有一个功能
type Reducer k v = k -> [v] -> [v]
如果我有一个类型为
的变量 r
Ord k => Reducer k v
和来自类型
的变量input
Ord k => Map k [v]
我可以写出表达式
Map.toList . Map.mapWithKey r input
并从类型 [(k,[v])]
中获取输出
现在假设我有一个类型为 :
的函数
type ReducerM m k v = k -> [v] -> m [v]
和类型为 :
的变量 rm
(Ord k, Monad m) => ReducerM m k v
我要应用表达式
Map.toList . Map.mapWithKey rm input
并取回类型 m [(k,[v])]
有人可以帮助指导我怎么做吗?
通过 fmap (k ,)
传递你的 reducer 结果
{-# LANGUAGE TupleSections #-}
fmap (k ,) (_ :: m [v]) :: m (k,[v])
然后 toList
给你 [m (k,[v])]
.
然后sequence
把它变成你想要的m [(k,[v])]
。
我有一个功能
type Reducer k v = k -> [v] -> [v]
如果我有一个类型为
的变量r
Ord k => Reducer k v
和来自类型
的变量input
Ord k => Map k [v]
我可以写出表达式
Map.toList . Map.mapWithKey r input
并从类型 [(k,[v])]
现在假设我有一个类型为 :
的函数type ReducerM m k v = k -> [v] -> m [v]
和类型为 :
的变量rm
(Ord k, Monad m) => ReducerM m k v
我要应用表达式
Map.toList . Map.mapWithKey rm input
并取回类型 m [(k,[v])]
有人可以帮助指导我怎么做吗?
通过 fmap (k ,)
{-# LANGUAGE TupleSections #-}
fmap (k ,) (_ :: m [v]) :: m (k,[v])
然后 toList
给你 [m (k,[v])]
.
然后sequence
把它变成你想要的m [(k,[v])]
。