join可以通过以下方式定义实现>>=:
join :: Monad m => m (m a) -> m a
join m = m >>= id
Run Code Online (Sandbox Code Playgroud)
具体来说,如何在Maybe和List单声道中实现它?
是在monad中吗?
join Nothing = Nothing
join (Just (Just x)) = Just x
Run Code Online (Sandbox Code Playgroud)
在List monad中:
join [] = []
join [[xs]] = [xs]
Run Code Online (Sandbox Code Playgroud)
?
谢谢。
join仅实现一次,并且适用于Monad的所有类型。
Monad抽象的重点在于能够以相同的方式处理不同类型。在为您的类型提供>>=(和return)并确保它们遵循Monad法则之后,足够通用的仅能使用这些操作的任何代码都将正确处理您的类型。