palatable / lambda

Functional patterns for Java
https://palatable.github.io/lambda/
MIT License
860 stars 85 forks source link

HList.cons() static factory method doesn't infer tail type #2

Open jnape opened 7 years ago

jnape commented 7 years ago

HList.cons should be parametrized to take advantage of Generalized Target Type Inference, making the following expression infer the resulting HList type from right-hand argument:

SingletonHList<Integer> cons = HList.cons(1, HList.nil());
Tuple2<String, Integer> cons = HList.cons("foo", HList.cons(1, HList.nil()));
// ... and so on for other tuple specializations

Unfortunately, after adding this behavior, compile time was observed to have exponentially increased to over 15 seconds thanks to JDK-8055984, so this behavior shouldn't be added back until it's fixed (targeted for Java 1.9).

jnape commented 6 years ago

This should be attempted again when addressing #15

jnape commented 6 years ago

Apparently HListLens#3-HListLens8 are completely out of the equation as well, since proving the lens laws just for _3 blows up the javac stack under ~1G and then takes God knows how long to compile (I killed it after 10 minutes).

I am Jack's complete lack of surprise.

jnape commented 5 years ago

After Java12 comes out, I may make Java10 the required JDK version to target to use lambda, at which point, I can add this functionality back.

jnape commented 5 years ago

Pushing this until version 5, at which point Java 11 will be the target JDK, with anything before it considered a secondary priority