如何将失败的计算转换为成功的计算,反之亦然

Mat*_*ick 10 haskell typeclass

这很可能是一个寻求问题的解决方案......如果是这样,我请你放纵!

可能的实施:

class Switch' f where
  switch :: f a -> f ()

instance Switch' [] where
  switch []     = [()]
  switch (_:_)  = []

instance Switch' Maybe where
  switch Nothing   = Just ()
  switch (Just _)  = Nothing
Run Code Online (Sandbox Code Playgroud)

解释是:给定一个成功的计算,使其失败; 如果计算失败,请使其成功.我不确定,但这似乎可能与MonadPlus相反......如果你真的很眯眼.???

这个概念是否有标准类型类或其他实现?基础数学会是什么样的,如果有的话(即这是一个半群,一个循环等)?

sin*_*yma 7

switch :: (Alternative f, Eq (f a)) => f a -> f ()
switch x | x == empty = pure ()
         | otherwise = empty
Run Code Online (Sandbox Code Playgroud)

要么

switch :: (MonadPlus m, Eq (m a)) => m a -> m ()
switch x | x == mzero = return ()
         | otherwise = mzero
Run Code Online (Sandbox Code Playgroud)

  • `Eq`约束是不幸的 (3认同)