Некоторые функторы Haskell F a
, очевидно, изоморфны T -> a
для некоторого типа T
, например.
data Pair a = Pair a a -- isomorphic to Bool -> a
data Reader r a = Reader (r -> a) -- isomorphic to r -> a (duh!)
data Identity a = Identity a -- isomorphic to () -> a
data Phantom a = Phantom -- isomorphic to void -> a
(Эти изоморфизмы имеют только строгость и рассматривают только конечные структуры данных.)
Итак, как вообще можно охарактеризовать функторы, где это возможно?
И возникает вопрос: "Какие функционалы Haskell являются представимыми?" тот же вопрос?