Data.Tree.Zipper では、バラの木のジッパーのデータ型は次のとおりです。
data TreePos t a = Loc
{ _content :: t a -- ^ The currently selected tree.
, _before :: Forest a
, _after :: Forest a
, _parents :: [(Forest a, a, Forest a)]
} deriving (Read,Show,Eq)
_after と _before の情報は、_parents フィールドにも表示されるはずなので、冗長であるように思えます。(ノードの兄弟は、その親の子です。)
どうしてこれなの?都合上?