1) Через C. Haskell экспортит свои функции (foreign export), из Java их зовём (на Java не писал, так что не знаю, как там принято). С тех пор, как я собирал dll под windows прошло много времени, раньше это было несколько напряжно (именно под windows), сейчас возможно и проблемы нет. Почитать можно тут:
https://wiki.haskell.org/Calling_Haskell_from_C https://downloads.haskell.org/~ghc/latest/docs/htm...
2) Через сокеты. Запускаете Haskell-процесс, который слушает подключение. Далее кормите его запросами, а он выдает ответы. В каком виде запросы - неважно, JSON, например.