将Java数组映射到Frege

将Java数组映射到Frege,java,arrays,frege,Java,Arrays,Frege,假设我想映射Java代码: package mypackage; class A { public String[] values() { return new String[]{"one", "two"}; } } 致其弗雷格对应方: data AA = pure native mypackage.A where native values :: AA -> [String] 目前,弗雷格抱怨: error: incompatible type

假设我想映射Java代码:

package mypackage;

class A {
    public String[] values() {
       return new String[]{"one", "two"};
    }
}
致其弗雷格对应方:

data AA = pure native mypackage.A where
    native values :: AA -> [String]
目前,弗雷格抱怨:

error: incompatible types: String[] cannot be converted to TList

如何将Java数组映射到Frege?

消息实际上来自Java编译器

对应于Java数组的Frege类型

Foo[]

其中,
Bar
是对应于
Foo
的弗雷格类型

所以,在你的情况下,应该是这样

JArray String
请注意,从Frege的角度来看,这是一个不可变的数组。 如果需要可变数组,请使用

Mutable s (JArray String)
但是,当然,它只能用于圣莫纳德

以下是相关在线文档的链接:
因为这是Prelude的一部分,所以使用它不需要导入任何内容。

不仅Frege抱怨Java代码无效。讽刺的是,出于同样的原因。数组和列表是不同的类型…我错了。我没有复制/粘贴。我真的是指数组。感谢Ingo修复示例:)
Mutable s (JArray String)