Hi Alp,
I had a nice time going through inline-java and sparkle! The API I made up for the Java FFI is similar to yours but I don't do the extensive type-level hackery that you have. Another key difference is that I use GHC Annotations to specify the qualified class name where you use type-level strings.
Nice work supporting almost all of the JNI in a clean way! I recently looked at the JNI API and it stated that the functions that interact with the JVM are a tad slow due to reflection + the fact that native methods don't get inlined. I'm interested in benchmarking programs compiled with GHC/Sparkle vs GHCVM/FFI to Spark once the first release is out.
Thanks,
Rahul