簡體   English   中英

是否有類似 ml 的語言(標准 ml/ocaml/f#/haskell/etc),其中列表元素是選項類型

[英]Is there a ml like language(standard ml/ocaml/f#/haskell/etc) in which list elements are option types

在我看來,[](空列表)和 None/Nothing 是如此相似。 我想知道該語言家族中是否有任何一種具有基本列表類型,其中每個元素都是一個選項,而尾部保護是空的?

是不是(在具有不同類型的語言中沒有這樣做)因為它會使模式匹配列表過於冗長?

在 Lisp 中有類似的東西,其中nil用於表示不存在可選值和空列表。 你可以在 Haskell 中做這樣的事情(我假設大多數類似 ML 的語言),

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

但它更冗長,並且與使用自己的數據類型相比沒有任何明顯的好處。

嗯,我不知道。 這對於 Hindley-Milner 類型系統來說是很困難的,forms 是這些語言的類型系統的基礎。 (在 Haskell 命名法中) Nothing必須同時具有類型Maybe a[] a

可以使用Maybe上的定點類型來構造類似的東西(但不幸的是在 IMO 實踐中使用起來太笨拙):

-- fixed point
newtype Mu f = In (f (Mu f))
-- functor composition
newtype (f :. g) a = O (f (g a))

type List a = Mu (Maybe :. (,) a)

這與您所要求的同構,但令人頭疼。 我們可以輕松地制作一個缺點 function:

In (O (Just (1, In (O (Just (2, In (O Nothing)))))))

InO是“身份構造函數”——它們的存在只是為了指導類型檢查,所以你可以在精神上刪除它們,你就擁有了你想要的東西。 但是,不幸的是,您無法從物理上移除它們。

我們可以輕松地制作一個cons function。 我們在模式匹配方面並不那么幸運。 我不能代表其他 ML 家族語言,但 IIRC 它們甚至不能代表像Mu這樣的高級類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM