所以,让我们说我们想要处理使用类似于Maybe的容器失败的计算。如果我要为我想要做的事情指定一个类型类,它看起来像这样:
class Alternative f => Nullable f where
isEmpty :: f a -> Bool
这样isEmpty x == True
当且仅当x = empty
是否有一些现有的类型类我应该用于此功能,还是应该使用上面的类?
编辑:更多上下文
我正在尝试为逻辑编程实现匹配,我希望能够拥有一个" not pattern" ie"当且仅当该程序失败时才成功,然后执行___"。
答案 0 :(得分:5)
也许您可以这种方式使用Foldable
。 Maybe
,[]
,Either
,ErrorT
,ExceptT
都是Foldable
。您可以只对toList
的结果进行模式匹配。
如果您希望对成功执行的结果执行某些操作而在发生故障时不执行任何操作,则可以直接使用forM_
。
或者,您可以使用MonoidNull
中提供null
谓词的monoid-subclasses
类型类。
答案 1 :(得分:1)
正如在对 danidiaz's answer 的评论中所预言的那样,base-4.8 概括了 null
的类型,使其成为 {{1} } 容器:
Foldable