http://www.iai.uni-bonn.de/~jv/mpc08.pdf - この記事では、次の宣言を理解できません。
instance TreeLike CTree where
...
abs :: CTree a -> Tree a
improve :: (forall m. TreeLike m => m a) -> Tree a
improve m = abs m
(forall m.TreeLike m => ma) がもたらす違い (ここでは TreeLike m => ma で十分だと思いました)
ma の m が CTree だけでなく任意の TreeLike にできるのに、なぜここで abs を許可するのですか?