List 是否有一种类似ml的语言(标准ml/ocaml/f/haskell/etc),其中列表元素是选项类型

List 是否有一种类似ml的语言(标准ml/ocaml/f/haskell/etc),其中列表元素是选项类型,list,haskell,functional-programming,null,ml,List,Haskell,Functional Programming,Null,Ml,在我看来,似乎[]空列表和无/无如此相似。 我想知道这一系列语言中是否有一种基本的列表类型,其中每个元素都是一个选项,而尾部保护什么都不是 在具有不同类型的语言中,不是这样做的吗?因为这会使模式匹配列表过于冗长?在Lisp中有类似的内容,其中nil用于表示缺少可选值和空列表。您可以在Haskell中执行类似的操作,我假设大多数类似ML的语言 newtype MyList a = MyList (Maybe (a, MyList a)) 但是它更详细,并且与使用自己的数据类型相比没有任何明显的好

在我看来,似乎[]空列表和无/无如此相似。 我想知道这一系列语言中是否有一种基本的列表类型,其中每个元素都是一个选项,而尾部保护什么都不是


在具有不同类型的语言中,不是这样做的吗?因为这会使模式匹配列表过于冗长?

在Lisp中有类似的内容,其中nil用于表示缺少可选值和空列表。您可以在Haskell中执行类似的操作,我假设大多数类似ML的语言

newtype MyList a = MyList (Maybe (a, MyList a))

但是它更详细,并且与使用自己的数据类型相比没有任何明显的好处。

在Lisp中也有类似的东西,其中nil用于表示缺少可选值和空列表。您可以在Haskell中执行类似的操作,我假设大多数类似ML的语言

newtype MyList a = MyList (Maybe (a, MyList a))

但是它更为冗长,并且与使用自己的数据类型相比没有任何明显的好处。

嗯,我不知道。这对于Hindley-Milner类型系统来说是困难的,它构成了这些语言的类型系统的基础。在Haskell命名法中,任何东西都不必同时具有a型和[]a型

类似但不幸的是,IMO在实践中太难使用,可以使用固定点类型在以下情况下构建:

这与你所要求的是同构的,但却是一种痛苦。我们可以轻松地使cons功能:

In (O (Just (1, In (O (Just (2, In (O Nothing)))))))
In和O是身份构造函数——它们的存在只是为了指导类型检查,所以您可以在心里删除它们,这样您就得到了想要的。但是,不幸的是,您无法实际移除它们


我们可以很容易地使cons起作用。我们在模式匹配方面没有那么幸运。我不能代表其他ML家族语言,但IIRC它们甚至不能代表更高级的类型,比如Mu。

嗯,我不知道。这对于Hindley-Milner类型系统来说是困难的,它构成了这些语言的类型系统的基础。在Haskell命名法中,任何东西都不必同时具有a型和[]a型

类似但不幸的是,IMO在实践中太难使用,可以使用固定点类型在以下情况下构建:

这与你所要求的是同构的,但却是一种痛苦。我们可以轻松地使cons功能:

In (O (Just (1, In (O (Just (2, In (O Nothing)))))))
In和O是身份构造函数——它们的存在只是为了指导类型检查,所以您可以在心里删除它们,这样您就得到了想要的。但是,不幸的是,您无法实际移除它们


我们可以很容易地使cons起作用。我们在模式匹配方面没有那么幸运。我不能代表其他ML家族语言,但IIRC他们甚至不能代表更高级的类型,比如Mu。

你知道,或者你可以忘记所有的Mu垃圾,按照@hammar说的去做。唉,还是一个过度工程的人:-你知道,或者你可以忘记所有的Mu垃圾,按照@hammar说的去做。唉,还是个过度工程的人:-有什么好处?为不同的目的定义不同的类型是一件好事。会有什么好处?为不同的目的定义不同的类型是一件好事。