これは問題を探す解決策かもしれません...もしそうなら、私はあなたの耽溺をお願いします!
可能な実装:
class Switch' f where
switch :: f a -> f ()
instance Switch' [] where
switch [] = [()]
switch (_:_) = []
instance Switch' Maybe where
switch Nothing = Just ()
switch (Just _) = Nothing
解釈は次のようになります。成功した計算が与えられた場合、それを失敗したものにします。失敗した計算が与えられたら、それを成功させます。よくわかりませんが、これはMonadPlusとは逆のようです...本当に目を細めている場合。???
この概念の標準の型クラスまたはその他の実装はありますか?もしあれば、基礎となる数学はどのように見えるでしょうか(つまり、これは半群、ループなどです)?