如何在java中实现haskell数据类型?

如何在java中实现haskell数据类型?,java,haskell,functional-programming,frege,Java,Haskell,Functional Programming,Frege,如果您有这些Haskell数据类型 data Mlist a = Mlist [a] data Mordering = MLT | MEQ | MGT | MIN deriving (Eq, Show) 用java编写此代码的最佳方法是什么?如果您想在java中获得仅求和的类型,那么很容易。只需使用枚举: public enum Mordering { MLT, MEQ, MGT, MIN } 您甚至可以免费获得equality、toString()和其他有用的东西。如果您只需要产

如果您有这些Haskell数据类型

data Mlist a = Mlist [a]

data Mordering = MLT | MEQ | MGT | MIN deriving (Eq, Show)

用java编写此代码的最佳方法是什么?

如果您想在java中获得仅求和的类型,那么很容易。只需使用枚举:

public enum Mordering {
    MLT, MEQ, MGT, MIN
}
您甚至可以免费获得equality、
toString()
和其他有用的东西。如果您只需要产品类型,如您的
Mlist
,那么简单类就是一种选择:

public class Mlist<T> {
    public final List<T> list;

    public Mlist(List<T> list) {
        this.list = list;
    }
}

不确定是否有最好的方法

但是为了得到一个想法,我们可以做以下工作:通过运行这个代码并查看它生成的java代码


(Frege是一种JVM语言,它试图弥补缺少的Haskell JVM后端。Frege本质上是Haskell 2010加上更高级别的多态类型和Java互操作。)

Java现有的列表数据类型有什么问题?至于后者,我不太懂Java,但它一定有某种枚举……也许你可以看看
abstract sealed class Optional[+T]
case class Present[+T](value: T) extends Optional[T]
case class Absent() extends Optional[Nothing]