我可以想出两种可能的方法:filterMapM1 :: (Monad m, Ord k) => (v -> m Bool) -> M.Map而是与State单子中的状态进行比较;那么我们可以使用Data.Map.filter (非常特殊的情况):
filterMapM2 :: (Monad m, Ord k) => (v -> v -> B
但是,当我将这个表达式的值赋值给一个变量,然后在以后使用这个变量时,我似乎并不认为我实际上存储了读取值的计算,而不是读值本身。在计算器模块内部,我使用一个Map来存储变量的值。因为我需要处理IO,所以它被包装在一个IO monad中,在下面的最小示例中是永久化的:
type State = Map.Map<