在Maybe / List monad中如何实现`join`?

Tim*_*Tim 3 monads haskell

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)

谢谢。

Bar*_*icz 5

join仅实现一次,并且适用于Monad的所有类型。

Monad抽象的重点在于能够以相同的方式处理不同类型。在为您的类型提供>>=(和return)并确保它们遵循Monad法则之后,足够通用的仅能使用这些操作的任何代码都将正确处理您的类型。