|
1 | 1 | package fj; |
2 | 2 |
|
3 | 3 | import fj.data.*; |
| 4 | +import fj.data.fingertrees.FingerTree; |
| 5 | +import fj.data.fingertrees.Node; |
4 | 6 | import fj.data.hlist.HList; |
5 | 7 | import fj.data.vector.V2; |
6 | 8 | import fj.data.vector.V3; |
@@ -301,6 +303,44 @@ public static <A> Show<Tree<A>> treeShow(final Show<A> sa) { |
301 | 303 | }); |
302 | 304 | } |
303 | 305 |
|
| 306 | + public static <V, A> Show<fj.data.fingertrees.Digit<V, A>> digitShow(final Show<V> sv, final Show<A> sa) { |
| 307 | + return show(d -> { |
| 308 | + String s = d.match( |
| 309 | + o -> "One(" + o.measure() + " -> " + o.value() + ")", |
| 310 | + two -> "Two(" + two.measure() + " -> " + v2Show(sa).showS(two.values()) + ")", |
| 311 | + three -> "Three(" + three.measure() + " -> " + v3Show(sa).showS(three.values()) + ")", |
| 312 | + four -> "Four(" + four.measure() + " -> " + v4Show(sa).showS(four.values()) + ")" |
| 313 | + ); |
| 314 | + return Stream.fromString(s); |
| 315 | + }); |
| 316 | + } |
| 317 | + |
| 318 | + public static <V, A> Show<Node<V, A>> nodeShow(final Show<V> sv, final Show<A> sa) { |
| 319 | + return show(n -> { |
| 320 | + final String s = n.match( |
| 321 | + n2 -> "Node2(" + n2.measure() + " -> " + v2Show(sa).showS(n2.toVector()) + ")", |
| 322 | + n3 -> "Node3(" + n3.measure() + " -> " + v3Show(sa).showS(n3.toVector()) + ")"); |
| 323 | + return Stream.fromString(s); |
| 324 | + }); |
| 325 | + } |
| 326 | + |
| 327 | + public static <V, A> Show<FingerTree<V, A>> fingerTreeShow(final Show<V> sv, final Show<A> sa) { |
| 328 | + |
| 329 | + return show(ft -> { |
| 330 | + String sep = ", "; |
| 331 | + String str = ft.match(e -> "Empty()", |
| 332 | + s -> "Single(" + sv.showS(ft.measure()) + " -> " + sa.showS(s.value()) + ")", |
| 333 | + d -> "Deep(" + d.measure() + " -> " + |
| 334 | + digitShow(sv, sa).showS(d.prefix()) + sep + |
| 335 | + fingerTreeShow(sv, nodeShow(sv, sa)).showS(d.middle()) + sep + |
| 336 | + digitShow(sv, sa).showS(d.suffix()) + |
| 337 | + ")" |
| 338 | + ); |
| 339 | + return Stream.fromString(str); |
| 340 | + }); |
| 341 | + } |
| 342 | + |
| 343 | + |
304 | 344 | public static <A> Show<Seq<A>> seqShow(final Show<A> sa) { |
305 | 345 | return show(s -> streamShow(sa, "Seq(", ",", ")").show(s.toStream())); |
306 | 346 | } |
|
0 commit comments