haskell - 有错误折叠的类型类吗?
问题描述
假设T
是一个类型,它是Foldable
. 如果我需要执行一个可能失败的折叠,我可以使用foldM
一个返回Maybe
.
但是,如果折叠的易错性是其T
自身固有的呢?有一个类型类吗?换句话说,是否有可以折叠的类型的类型类,但不能为所有值定义折叠?
这可以推广到除 之外的其他 Monad(或其他类型的构造函数)Maybe
吗?
更新
我正在寻找这样的东西:
{-# 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
,它会使不可折叠的分支显示为空。
推荐阅读
- sql - 带分区的 Oracle SQL 滞后函数
- python - 在 Tkinter 中堆叠具有不同内容的相同帧
- python - 使用导入的 CSV 文件(熊猫)创建列表/字典,以便我可以使用网络抓取工具引用变量
- c# - 从视图到控制器的 Ajax 请求正文在 ASP NET Core MVC 3 中为空
- c# - 当 C# 控制台应用程序中的变量更改时,连接会自动更改
- python - 由于 python 版本不匹配(3.8.5 与 3.8.6)导致包含 python 模块的问题
- node.js - 在配置模块从 default.json 读取配置之前在节点中设置环境变量
- c# - C# 编译错误:“lc.exe”退出,代码为 -1073741819
- racket - DrRacket 中的布尔可满足性问题
- oracle - 如何重置 Oracle 优化以测试 proc 更改