有没有易犯错折叠的类型类?



假设TFoldable的实例的类型。 如果我需要执行可能失败的折叠,我可以将foldM与返回Maybe的函数一起使用。

但是,如果折叠的易错性是T本身固有的呢?有没有类型类? 换句话说,对于可以折叠的类型,是否有一个类型类,但不能为所有值定义折叠?

这可以推广到除Maybe以外的其他Monads(或其他类型的构造函数(吗?

更新

我正在寻找这样的东西:

{-# LANGUAGE TypeFamilies #-}
class FoldableT t where
type F t :: * -> *
foldMap  :: Monoid m => (a -> m) -> t a -> F t m 

那么Foldable就只是FoldableT的一个特例,其中F就是身份。

您可能没有考虑过的一种可能性是用微不足道的可折叠类型包裹不可折叠类型:

newtype Trivial a = Trivial a
deriving (Functor)
instance Foldable Trivial where
foldMap _ _ = mempty

然后,您可以对整个类型派生Foldable,这将使不可折叠的分支显示为空。

最新更新