我们可以定义data Free f a = Pure a | Free (f (Free f a)),也可以定义Functor f => Monad (Free f)。Profunctor f => M (T f a),其中class Profunctor f where dimap :: (a -> b) -> (c -> d) -> f b c -> f a d
自从我注意到和Free
f a = Free( Mu (FreeF f a) )
fmap h (Free (out-> PureF a)) = Free (In (PureF (h a)))
fmap h (Free (out -> FreeF fn)) = Free (In (fmap undefinedf a = <e