如何在 Frege 本机声明中声明 Java 枚举?
How do I declare Java enums in Frege native declarations?
在 JavaFX 动画 class 上使用 Frege native-gen 工具时,它会生成包含以下内容的 Frege 代码:
data Animation = mutable native javafx.animation.Animation where
native getRate :: Animation -> IO Double
native getStatus :: Animation -> IO Animation_Status
但是由于缺少 Animation_Status 类型,代码无法编译。在 Java 端,这是一个枚举。
http://docs.oracle.com/javafx/2/api/javafx/animation/Animation.Status.html
在本机声明中处理此问题的建议方法是什么?
我们可以为内部 classes 生成 Frege 代码。输入到 native-gen 工具的 class 名称是 Class.getName
返回的名称。对于 Animation.Status
枚举,它是 javafx.animation.Animation$Status
.
$ java -jar native-gen-1.0-SNAPSHOT.jar
Enter class name: javafx.animation.Animation$Status
data Animation_Status = pure native javafx.animation.Animation.Status where
pure native paused "javafx.animation.Animation.Status.PAUSED" :: Animation_Status
pure native running "javafx.animation.Animation.Status.RUNNING" :: Animation_Status
pure native stopped "javafx.animation.Animation.Status.STOPPED" :: Animation_Status
pure native valueOf "javafx.animation.Animation.Status.valueOf" :: String -> Animation_Status
native values "javafx.animation.Animation.Status.values" :: () -> STMutable s (JArray Animation_Status)
derive Serializable Animation_Status
顺便说一句,我目前正在开发的native-gen
版本可以递归地为整个Java包及其子包生成Frege代码。我们可以只提供根包 javafx
,它会为其所有子包中的所有 classes 创建 Frege 模块。我希望在本周末之前发布这个。
在 JavaFX 动画 class 上使用 Frege native-gen 工具时,它会生成包含以下内容的 Frege 代码:
data Animation = mutable native javafx.animation.Animation where
native getRate :: Animation -> IO Double
native getStatus :: Animation -> IO Animation_Status
但是由于缺少 Animation_Status 类型,代码无法编译。在 Java 端,这是一个枚举。 http://docs.oracle.com/javafx/2/api/javafx/animation/Animation.Status.html
在本机声明中处理此问题的建议方法是什么?
我们可以为内部 classes 生成 Frege 代码。输入到 native-gen 工具的 class 名称是 Class.getName
返回的名称。对于 Animation.Status
枚举,它是 javafx.animation.Animation$Status
.
$ java -jar native-gen-1.0-SNAPSHOT.jar
Enter class name: javafx.animation.Animation$Status
data Animation_Status = pure native javafx.animation.Animation.Status where
pure native paused "javafx.animation.Animation.Status.PAUSED" :: Animation_Status
pure native running "javafx.animation.Animation.Status.RUNNING" :: Animation_Status
pure native stopped "javafx.animation.Animation.Status.STOPPED" :: Animation_Status
pure native valueOf "javafx.animation.Animation.Status.valueOf" :: String -> Animation_Status
native values "javafx.animation.Animation.Status.values" :: () -> STMutable s (JArray Animation_Status)
derive Serializable Animation_Status
顺便说一句,我目前正在开发的native-gen
版本可以递归地为整个Java包及其子包生成Frege代码。我们可以只提供根包 javafx
,它会为其所有子包中的所有 classes 创建 Frege 模块。我希望在本周末之前发布这个。