Neues Zeugs

Habe mich mal im experimental Branch etwas ausgetobt (dafür ist er ja da), alles ziemlich ungetestet:

  • tuple.Comprehension hatte ich ja schon vorgestellt. Ist speziell für for-loops gedacht (arbeitet deshalb rein auf Iterable-Level) und einfacher zu verwenden als z.B. Streams. Allerdings ist tuple vielleicht nicht das optimale Package dafür
  • tuple.Quadruple war einfach zu lang, habe ich mal auf Quad gekürzt
  • function.Functions bietet diverse Konvertierungsfunktionen (Currying u.s.w.) und den Y-Kombinator
  • monoid ist ein kleines Package. Keine Angst vor dem Namen, es ist einfach nur ein binärer Operator, der auch ein neutrales Element enthält.
  • monad ist wohl die kontroverseste Neuerung, aber ich wollte die Monoide natürlich gleich ausprobieren. Bis jetzt nur zwei Beispiele, am Umfang feile ich noch. Natürlich kann man in Java kein gemeinsames Interface für Monaden angeben, aber die konkreten Instanzen funktionieren. Eventuell könnte ein DynamicProxy die Implementierung vereinfachen, muss ich früber meditieren. Wenn ihr meint, dass das überhaupt nicht reinpasst, haue ich es auch wieder weg - nur sind eben fast alle Dinge, die wir in der Bibliothek definiert haben, auch Monaden (nämlich die Tupel, Either und List)

Ich weiß natürlich, dass der Elefant im Raum immer noch der Collection-Teil ist. Inzwischen bin ich kurz davor, Stream und Sequence erst einmal wegzulassen, und mich auf ein List-Interface (später NecoList) mit den Implementierungen LazyList und StrictList zu konzentrieren.

Weiterhin sollten die einzelnen Teile der Bibliothek besser miteinander verzahnt werden. An manchen Stellen fällt auch das Fehlen gemeinsamer Konventionen auf.