Учитывая
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
для списков.