Functional Java Changelog

What's new in Functional Java 4.3

Mar 7, 2015
  • Enhancements:
  • Added toInt and fromInt to fj.Ordering (#71)
  • Added Java 8 collectors (#69)
  • Made Seq.empty() and List.nil() return singleton instances (#70)
  • Made anonymous classes using lamdas (#67)
  • Improved show for list, tree, set, treemap, stream, array, V arity 2 to 8, HList (#77)
  • Added TreeMap.splitLookup (#4)
  • Add union to TreeMap (#83)
  • Added List.isSingle (#84)
  • Added Option traverse family of methods (#85)
  • Added equals, hashCode and toString to classes P’s, Array, Either, List, Option, Seq, Set, Stream, Tree, TreeMap, Validation (#75, #86)
  • Added release notes as asciidoc (#92)
  • Added F0 interface (#93)
  • Added wrapper functions for function interfaces arity 1 and 2 (#94)
  • Enhanced implementation of equals for standard classes (#95)
  • Added traverse method family to P1, P2, Either, List, Validation (#80)
  • Enhanced integration with basic Java types (#99)
  • Made artifact OSGI compatible, suitable as Eclipse plugin (#72)
  • Added predicate combinators (#98)
  • Fixes:
  • Fixed TreeMap.split (#4, #79)
  • Fixed Option.fromNull javadoc (#73)
  • Fixed Try javadoc (#91)
  • Fixed stack overflow in TreeMap.update (#97)
  • Fixed concurrency issue with P1.memo (#105)
  • Breaking Changes:
  • 93 added the F0 interface which P1 implements. This could break code where the _1 method for a new P1 called the method f outside P1’s scope. Making P1 implement F0 means that P1 now has an f method which hides the visibility of the previously visible outer f. You can fix this by using P.lazy.

New in Functional Java 4.2 (Mar 7, 2015)

  • Enhancements:
  • Added Java 8 examples
  • Added new website
  • Added Option.none_()
  • Gradle 2.2.1 support with wrapper
  • Added to Strings: isNullOrEmpty, isNullOrBlank and isNotNullOrBlank
  • Added Try with arity 0-8 for lambdas that throw exceptions
  • Added Effect with arity 0-8 for lambdas with a void return
  • Added TryEffect with arity 0-8 for lambdas with a void return that throw an Exception.
  • Conversion from Java 8 types to Functional Java types and vice-versa
  • Added monadic IO methods
  • Support instantiation of IO with lambdas
  • Added first class cons_ for List
  • Added partial application of first parameter for F 1-8
  • Added SafeIO that encodes IOExceptions into Validations
  • Added simple RNG
  • Added Reader, Writer and State
  • Deprecated $._
  • Added Array.scan family of methods
  • Support instantiating P1 values using lambdas to P.lazy
  • Added toString for Validation, P arities 1 to 8, Either
  • Added vending machine demo
  • Added Option.toValidation
  • Added map and contramap for F and F2.
  • Added partial application for F1.
  • Added filter and uncurried foldLeft and foldRight to FingerTree.
  • Added foldLeft, foldRight and map to Seq.
  • Accumulate Validation errors in a List.
  • Convert from fj.data.Stream to java.util.Stream and vice versa.
  • Added groupBy on List.
  • Fixes:
  • Various Javadoc issues
  • Large inserts into TreeMap
  • Javadoc support for Java 8
  • Null parameter NullPointerException for Show.anyShow
  • Exception propagation in test data generators
  • Product memoisation for arities 1 to 8
  • ClassCastException in class fj.data.Java
  • Fixed performance of Set.member.

New in Functional Java 4.1 (Mar 7, 2015)

  • Support Java 7 by removing default methods. Methods on class C with default methods moved to static methods on new class ${c}Functions.

New in Functional Java 4.0 (Mar 7, 2015)

  • Merged changes from 3.2
  • Minimal changes to support Java 8.
  • Changed abstract classes to interfaces with default methods (P1, F1 to F8).

New in Functional Java 3.2 (Mar 7, 2015)

  • Added methods to HashMap: toList, toStream, toOption, toArray, map, mapKeys, foreach, convert to/from java.util.Map
  • Convert from java.util.List to List
  • Fixed findChild method in TreeZipper to handle empty stream
  • Fixed stack overflow when sorting and zipping
  • Fixed stack overflow in Stream’s bind method
  • Small Javadoc fixes

New in Functional Java 3.1 (Mar 7, 2015)

  • Administrivia:
  • Sources have been moved to GitHub
  • Built has been converted to SBT
  • New features:
  • List.mapMOption - list traversal in the Option monad.
  • List.allEqual - Returns whether or not all elements in the list are equal.
  • Added a monoid for Double.
  • Tree.bottomUp - Grows a tree from another tree by folding it from the bottom up.
  • Strings.isNotNullOrEmpty - does what it says.
  • Ord.hashOrd - an order instance that uses hashCode() for the order.
  • Ord.hashEqualsOrd - same as above but also uses .equals()
  • Set.set - A vararg Set factory method.
  • Added first-class functions for Set intersect, union, and minus.
  • First-class LazyString.toString.
  • Added hashCode() and equals() to Option.
  • Iteratees and an IO monad.
  • Trampoline - a general solution for tail-call elimination in Java.
  • List.equals(), List.hashCode(), and List.toString().
  • Bug fixes:
  • Stream.inits should always be nonempty.
  • Stream was not compiling in Eclipse.
  • Stream.length is now tail-recursive.
  • TreeZipper.delete was flipping lefts and rights.
  • Fixed naturalOrd Javadoc.

New in Functional Java 3.0 (Mar 7, 2015)

  • A crucial change has been made to the F interfaces, which are now abstract classes and containing useful methods. This means some other methods (fj.Function) are redundant and will be removed in a release soon (perhaps with a @Deprecated first).
  • There are other minor additions and bug fixes.