free monad from value level functor thing