我被告知以下功能在功率上是等效的
hylo :: Functor f => (f b -> b) -> (a -> f a) -> a -> b
hylo f g = h where h = f . fmap h . g
hyloM :: (Traversable g, Monad m) => (g b -> m b) -> (a -> m (g a)) -> a -> m b
hyloM f g = h where h = f <=< traverse h <=< g
但是,对于我的生活,我无法弄清楚如何证明这一点。在 hyloM 中将 Monad 设置为 Identity 几乎是正确的,但 gTraversable
不是Functor
,我尝试了多种方法从 hylo 到 hyloM,但均未成功。
这些是同构的,还是至少在力量上相似?如果是这样,我如何证明这一点?