|
3 | 3 | import fj.data.*; |
4 | 4 | import fj.data.hamt.BitSet; |
5 | 5 | import fj.data.hlist.HList; |
| 6 | +import fj.data.optic.Traversal; |
6 | 7 | import fj.data.vector.V2; |
7 | 8 | import fj.data.vector.V3; |
8 | 9 | import fj.data.vector.V4; |
@@ -466,6 +467,25 @@ public static <A> Equal<Zipper<A>> zipperEqual(final Equal<A> ea) { |
466 | 467 | } |
467 | 468 |
|
468 | 469 | /** |
| 470 | + * An equal instance for the {@link TreeZipper} type. |
| 471 | + * |
| 472 | + * @param ea Equality across the elements of the tree zipper. |
| 473 | + * @return An equal instance for the {@link TreeZipper} type. |
| 474 | + */ |
| 475 | + public static <A> Equal<TreeZipper<A>> treeZipperEqual(final Equal<A> ea) { |
| 476 | + final Equal<Tree<A>> te = Equal.treeEqual(ea); |
| 477 | + final Equal<Stream<Tree<A>>> st = streamEqual(Equal.treeEqual(ea)); |
| 478 | + final Equal<Stream<P3<Stream<Tree<A>>, A, Stream<Tree<A>>>>> sp = |
| 479 | + streamEqual(p3Equal(streamEqual(treeEqual(ea)), ea, streamEqual(treeEqual(ea)))); |
| 480 | + return equalDef((a1, a2) -> |
| 481 | + te.eq(a1.focus(), a2.focus()) && |
| 482 | + st.eq(a1.lefts(), a2.lefts()) && |
| 483 | + st.eq(a1.rights(), a2.rights()) && |
| 484 | + sp.eq(a1.parents(), a2.parents()) |
| 485 | + ); |
| 486 | + } |
| 487 | + |
| 488 | + /** |
469 | 489 | * An equal instance for the {@link Array} type. |
470 | 490 | * |
471 | 491 | * @param ea Equality across the elements of the array. |
|
0 commit comments