/** * An Equal instance for tree zippers. * * @param e An Equal instance for tree elements. * @return An Equal instance for tree zippers. */ public static <A> Equal<TreeZipper<A>> eq(final Equal<A> e) { return p4Equal( treeEqual(e), streamEqual(treeEqual(e)), streamEqual(treeEqual(e)), streamEqual(p3Equal(streamEqual(treeEqual(e)), e, streamEqual(treeEqual(e))))).contramap(TreeZipper.p_()); }
@Override public boolean equals(Object other) { return Equal.equals0(Tree.class, this, other, () -> Equal.treeEqual(Equal.anyEqual())); }
/** * An equal instance for the {@link TreeZipper} type. * * @param ea Equality across the elements of the tree zipper. * @return An equal instance for the {@link TreeZipper} type. */ public static <A> Equal<TreeZipper<A>> treeZipperEqual(final Equal<A> ea) { final Equal<Tree<A>> te = Equal.treeEqual(ea); final Equal<Stream<Tree<A>>> st = streamEqual(Equal.treeEqual(ea)); final Equal<Stream<P3<Stream<Tree<A>>, A, Stream<Tree<A>>>>> sp = streamEqual(p3Equal(streamEqual(treeEqual(ea)), ea, streamEqual(treeEqual(ea)))); return equalDef((a1, a2) -> te.eq(a1.focus(), a2.focus()) && st.eq(a1.lefts(), a2.lefts()) && st.eq(a1.rights(), a2.rights()) && sp.eq(a1.parents(), a2.parents()) ); }