gpt4 book ai didi

java - 如何将 Java 重载构造函数映射到 Frege 函数

转载 作者:行者123 更新时间:2023-12-01 23:11:23 27 4
gpt4 key购买 nike

Java(不幸的是)支持构造函数和方法重载。例如,HashMap有四个构造函数。在弗雷格我不能这样做:

data Map = native java.util.Map

data HashMap = native java.util.HashMap where
native new :: () -> STMutable s HashMap
native new :: Int -> STMutable s HashMap
native new :: Int -> Float -> STMutable s HashMap
native new :: Mutable s Map -> STMutable s HashMap

这无法编译,因为我无法绑定(bind)四次"new"。 Frege 数据类型中是否可以有四个“Java 构造函数”?

最佳答案

可以使用|定义重载的构造函数和方法:

data HashMap k v = native java.util.HashMap where

native new :: Mutable s (Map k v) -> STMutable s (HashMap k v)
| () -> STMutable s (HashMap k v)
| Int -> STMutable s (HashMap k v)
| Int -> Float -> STMutable s (HashMap k v)

您还可以使用此https://github.com/Frege/native-gen作为从 Java 类生成 Frege 代码的起点。上面的代码是使用该项目生成的。

我说起点是因为这不能完全自动化。我们无法确定方法的纯度和 native 方法的空值。因此,您可以获取生成的代码并修改纯度,或者如果您知道该方法可能返回 null,则将返回类型设置为 Maybe a

关于java - 如何将 Java 重载构造函数映射到 Frege 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23715681/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com