Eta совместима с Java и / или Kotlin еще? - PullRequest
6 голосов
/ 18 января 2020

Я учу Haskell, но на своей дневной работе я пишу Kotlin / Java.

Я встречал Eta (https://eta-lang.org/), диалект Haskell, который компилируется в Java байт-код и работает на JVM. На веб-сайте указано, что у него есть:

Robust Interoperability

Eta has a strongly-typed Foreign Function Interface (FFI) that allows you to safely interoperate with Java. 

Но далее внизу страницы есть раздел «Скоро в продаже», в котором указано взаимодействие. Итак, мой вопрос, прежде чем я go к хлопотам по настройке среды для dev в:

Это официально еще поддерживается?

1 Ответ

2 голосов
/ 19 января 2020

То, что «скоро появится» - это «генератор привязок». В Eta реализован синтаксис для взаимодействия Java, но вам необходимо явно написать внешние объявления для каждой сущности Java, которую вы хотите вызвать. Например, как в связанном примере, классу, подобному

public class Counter {
    private int counter = 0;
    private final int max;
    public Counter(int max) { this.max = max; }
    public int postIncrement() { return max == counter ? counter : counter++; }
}

, необходим блок иностранного импорта

data Counter = Counter @example.Counter deriving Class
foreign import java unsafe "@new" newCounter :: Int -> Java a Counter
foreign import java unsafe "postIncrement" postIncrement :: Java Counter Int

Как вы можете догадаться, было бы предпочтительным, чтобы это было сгенерировано автоматически , Программа для этого поколения - это то, что является WIP, а не сама FFI.

...