这很可能是一个寻求问题的解决方案......如果是这样,我请求你的宽容!
可能的实现:
class Switch' f where
switch :: f a -> f ()
instance Switch' [] where
switch [] = [()]
switch (_:_) = []
instance Switch' Maybe where
switch Nothing = Just ()
switch (Just _) = Nothing
解释是:给定一个成功的计算,让它失败;给定一个失败的计算,让它成功。我不确定,但这似乎与 MonadPlus 正好相反……如果你眯着眼睛真的很用力的话。???
这个概念是否有标准类型类或其他实现?如果有的话,底层数学会是什么样子(即这是一个半群、一个循环等)?