http://hackage.haskell.org/package/free в Control.Monad.Free.Free позволяет получить доступ к "свободной монаде" для любого заданного Functor. Однако он не имеет экземпляра MonadFix. Это потому, что такой экземпляр не может быть написан, или он просто оставлен?
Если такой экземпляр не может быть написан, почему бы и нет?