Я могу определить естественное преобразование в Haskell как:
h :: [a] -> Maybe a
h [] = Nothing
h (x:_) = Just x
и с функцией k:
k :: Char -> Int
k = ord
условие естественности выполняется из-за того, что:
h . fmap k == fmap k . h
Можно ли продемонстрировать аналогичным образом условие естественности функции List monad join? У меня возникли проблемы с пониманием того, что join, скажем, concat в частности, является естественным преобразованием.