如何在Frege中声明带有类型变量的本机接口?

时间:2015-07-02 18:51:08

标签: java generics interface frege type-variables

我想在Frege中原生地声明一个具有泛型类型的java接口。例如,让我们从JavaFX中获取一个ObservableList。

省略通用类型E,它可以定义

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 *

处理此问题的建议方法是什么?

1 个答案:

答案 0 :(得分:2)

这很有趣,因为它适用于我开箱即用:

ingo@freguntu:~/Frege/frege$ java -jar ../eclipse-plugin/lib/fregec.jar -version
3.23.247-gd535935
runtime 0.064 wallclock seconds.
ingo@freguntu:~/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

ingo@freguntu:~/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.
ingo@freguntu:~/Frege/frege$ 

可以肯定的是,java编译器抱怨Frege发出的非泛型代码,但是再次进行类型检查没有意义,只有更弱:)

请尝试上一个eclipse插件附带的fregec,它应该可以工作。

此外,在日食时,请确保您不会被不会消失的错误标记所迷惑。例如,当您保存时,错误会变得粘滞,如果没有重新编译就不会消失。