给定
newtype Tree m a = Tree { runTree :: m (Node m a) }
data Node m a = Node
{ nodeValue :: a
, nodeChildren :: [Tree m a]
}
有有效的MonadFix
实例吗?
我的尝试是
instance MonadFix m => MonadFix (Tree m) where
mfix f = Tree $ do
Node
<$> mfix (runTree . f . nodeValue)
<*> fmap nodeChildren (runTree (mfix f))
然而,当我实际尝试使用它时,这似乎并没有终止。该实例在某种程度上受到MonadFix
列表实例的启发。