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相反......如果你真的很眯眼.???
这个概念是否有标准类型类或其他实现?基础数学会是什么样的,如果有的话(即这是一个半群,一个循环等)?
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)