Type Theory And Functional Programming Java