Я могу определить естественное преобразование в 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
в частности, является естественным преобразованием.