Страница Free structure в вики Haskell определяет функцию для преобразования экземпляра функтора в свободную монаду:
inj :: Functor f => f a -> Free f a
inj fa = Roll $ fmap Return fa
Затем, скажем, inj [1,2,3]
, имеет тип (Num t) => Free [] t
. Как определить функцию, возвращающую что-то вроде inj [1,2,3]
обратно в [1,2,3]
?