До сих пор каждая монада (которая может быть представлена как тип данных), с которой я столкнулась, имела соответствующий трансформатор монады или могла иметь ее. Есть ли такая монада, которая не может иметь ее? Или все монады имеют соответствующий трансформатор?
Трансформатором t
, соответствующим monad m
, я имею в виду, что t Identity
изоморфен m
. И, конечно же, он удовлетворяет законам трансформатора монады и что t n
является монадой для любой монады n
.
Я хотел бы увидеть либо доказательство (в идеале конструктивное), которое имеет каждая монада, либо пример конкретной монады, у которой ее нет (с доказательством). Меня интересуют как более ориентированные на Haskell ответы, так и теоретические (категории).
В качестве последующего вопроса существует ли монада m
, имеющая два разных трансформатора t1
и t2
? То есть t1 Identity
изоморфно t2 Identity
и m
, но существует монада n
такая, что t1 n
не изоморфна t2 n
.
(IO
и ST
имеют специальную семантику, поэтому я не учитываю их здесь и полностью игнорирую их). Пусть сосредоточены только на "чистых" монадах, которые могут быть построены с использованием типов данных.)