2015-07-02 2 views
2

Я хотел бы изначально объявить java-интерфейс в Frege, который имеет общий тип. Например, возьмем ObservableList из JavaFX.Как объявить собственный интерфейс с переменными типа в Frege?

Выход из общего типа Е, он работает, чтобы определить

data ObservableList = mutable native javafx.collections.ObservableList where 

, но когда я пытаюсь

data ObservableList e = mutable native javafx.collections.ObservableList where 
    native addAll :: ObservableList e -> MutableIO (JArray e) -> IO Bool 

увидеть полный пример here

я получаю

kind error, type constructor `ObservableList` has kind ?->generic, expected was * 

Что такое рекомендуемый способ обращения с этим?

+0

Просьба указать минимальное полное определение, отображающее ошибку. – Ingo

ответ

2

Это интересно, так как это работает для меня из коробки:

[email protected]:~/Frege/frege$ java -jar ../eclipse-plugin/lib/fregec.jar -version 
3.23.247-gd535935 
runtime 0.064 wallclock seconds. 
[email protected]:~/Frege/frege$ cat frege/StackOverflow.fr 
package StackOverflow where 

data ObservableList e = mutable native javafx.collections.ObservableList where 
    native addAll :: ObservableList e -> MutableIO (JArray e) -> IO Bool 

[email protected]:~/Frege/frege$ java -jar ../eclipse-plugin/lib/fregec.jar -d /tmp frege/StackOverflow.fr 
calling: javac -cp ../eclipse-plugin/lib/fregec.jar:/tmp -d /tmp -sourcepath . -encoding UTF-8 /tmp/StackOverflow.java 
Note: /tmp/StackOverflow.java uses unchecked or unsafe operations. 
Note: Recompile with -Xlint:unchecked for details. 
runtime 1.897 wallclock seconds. 
[email protected]:~/Frege/frege$ 

Чтобы быть уверенным, Java-компилятор жалуется на не-общем коде, который излучает Фрег, но нет никакого смысла проверки типов он снова, только слабее :)

Пожалуйста, попробуйте fregec, который поставляется с последним плагином затмения, он должен работать.

Кроме того, когда в затмении убедитесь, что вы не обмануты маркерами ошибок, которые не уходят. Например, когда вы сохраняете, ошибки становятся липкими и не исчезнут без перекомпиляции.

+0

ОК, спасибо. Дело в самом деле не в коде, а в обработке правильной перекомпиляции всего после изменения кода и чтения сообщений об ошибках, исходящих от _users_ этого типа, которые еще не обновлены, чтобы отразить изменение типа. * Для других читателей этой проблемы *: просто делайте «нормальную» вещь в объявлениях типов с классами, интерфейсами, дженериками и т.п., и это сработает :-) Мой первоначальный вопрос был введен в заблуждение. – Dierk