Есть ли хороший способ написать программу на ML, а затем обернуть ее графическим интерфейсом, написанным на Java?
Я не знаю, является ли это хорошим способом для небольших приложений, но это определенно способ, который подходит для больших вещей в стиле IDE: Изабель / ML против Изабель / Scala / JVM. Это приложение интерактивного доказательства теорем, но в некотором смысле это простое программирование на SML.
Таким образом, вы можете написать базовый код Isabelle / ML, который генерирует некоторые сообщения в виде старомодного REPL, но вывод может интерпретироваться компонентами GUI на стороне JVM. Isabelle / jEdit обычно делает это для красивой печати цветного текста с небольшим количеством расширенного текста (подстрочный / верхний индекс и жирный шрифт).
Относительно явного перекодирования функциональных значений по каналам / сокетам в виде строк: в Isabelle / ML / Scala это получается довольно просто из-за некоторой имитации способа, которым SML будет представлять типизированные значения в нетипизированной памяти, но с использованием здесь нетипизированных деревьев XML вместо битов. Синтаксис передачи XML специфичен для простоты: YXML вместо официального квази-удобочитаемого XML. Все это вписывается в ок. 8000 байт источника SML - мне хочется публиковать здесь источники, но лучше поискать в Интернете «Изабель YXML» или «YXML PIDE».
Поскольку только Scala / JVM упоминается как отдельная альтернатива: она определенно работает, Scala также очень мощная и гибкая в имитации многих стилей программирования (ориентированных на функциональные объекты более высокого порядка), но для сложных символических приложений, таких как доказательство теорем, это просто не достигнет чистоты и стабильности SML. (Обратите внимание, что базовой платформой SML здесь является Poly / ML.)