试图理解 Monad 和 Foldable 之间的关系。我知道 Monad、Applicative 和 Functor 类型类的部分价值在于它们能够将函数提升到结构之上,但是如果我想为 Monad 中包含的值生成一个汇总值(例如最小值或最大值)怎么办?
如果没有累加器权利(如可折叠),这将是不可能的吗?为了拥有一个蓄能器,你必须注入或破坏结构?
min :: Ord a => a -> a -> a
foldMin :: (Foldable t, Ord a) => t a -> Maybe a
foldMin t = foldr go Nothing t
where
go x Nothing = Just x
go x (Just y) = Just (min x y)
这里,Nothing 值是累加器。所以不可能在do
块的范围内执行产生这样的汇总值的操作吗?