fact: Fixpoint foldFree `{Monad m} `(n : forall x, f x -> m x) `(fr : Free f a) : m a := match fr with | Pure x => pure x | Join _ g h => join $ fmap (foldFree n \o g) (n _ h) end.
imports: Hask.Prelude Hask.Control.Monad