haskell - 是否有易错折叠的类型类别?

标签 haskell

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

但是,如果折叠的错误是 T 本身固有的呢?有这个类型的类吗? 换句话说,是否存在可以折叠的类型的类型类,但不能为所有值定义折叠?

这可以推广到除也许之外的其他 Monad(或其他类型构造函数)吗?

更新

我正在寻找这样的东西:

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

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

最佳答案

您可能没有考虑过的一种可能性是用可轻松折叠的东西包裹不可折叠类型:

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

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

关于haskell - 是否有易错折叠的类型类别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59603865/

相关文章:

image - Juicy Pixels 提示内存不足

haskell - haskell中什么是二元运算符

haskell - Haskell 中的除法错误

haskell - 函数的无限递归列表

haskell - 获取 Haskell 程序中的 RTS 线程数?

haskell - 为什么快速检查通过这两个不同的功能 Haskell?

haskell - 使用 PolyKinds 和类型系列时出现类型歧义

Haskell 堆栈未构建测试可执行文件

algorithm - 算法 W(或 Haskell)中的函数参数不是多态的吗?

Haskell Let 表达式求值