Учитывая следующее семейство типов (предполагаемое для отражения изоморфизма A × 1 ≅ A)
type family P (x :: *) (a :: *) :: * where
P x () = x
P x a = (x, a)
и тип данных, определенный в терминах
data T a = T Integer (P (T a) a)
возможно ли хаккером какого-либо типа написать экземпляр Functor
для последнего?
instance Functor T where
fmap f = undefined -- ??
Интуитивно понятно, что делать в зависимости от типа f
, но я не знаю, как выразить это в Haskell.