Используя GHC FFI , вы можете создать разделяемую библиотеку , которая экспортирует функции из земли Haskell, которую Java затем может использовать через JNA . В качестве альтернативы вы можете взять эту же разделяемую библиотеку и написать некоторый связующий код, чтобы представить его через JNI для более "Java-y" интерфейса. Вы также можете сходить с ума и раскрыть достаточное количество JNI через FFI для Haskell, чтобы действительно запустить вашу Java (это в некотором смысле подход, который используется в документе Lambada).
Я считаю, что общий доступ к Haskell lib + JNA был бы самым простым и легким подходом. Это предполагает, что легче представить некоторые функции Haskell для Java, чем для представления некоторых объектов Java для Haskell. Для некоторого понимания того, как идти в другом направлении, вас может заинтересовать Salsa , то есть C #, а не Java, но могут представлять интерес принципы проектирования интерфейсов.