2011-07-09 4 views
1

[](空リスト)のように思えます。 その言語ファミリに基本的なリストタイプがあって、それぞれの要素がオプションで、テールガードが何もないのだろうか?リストの要素がオプションの種類であるmlのような言語(標準のml/ocaml/f#/ haskell/etc)がありますか?

パターンマッチングリストを過度に冗長にするので、別のタイプの言語ではそうしないのですか?

+1

どのようなメリットがありますか?異なる目的のために異なるタイプを定義することは良いことです。 –

答えて

5

あなたはLispに似たようなものがあります。ここでは、nilはオプションの値がないことと空のリストの両方を表すために使われます。あなたはHaskellでこのような何かを行うことができます(と私が最もML-のような言語を仮定)、

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

を、それはより冗長だと独自のデータ型を使用しての上に任意の明白な利点を持っていません。

4

ええと、私が知っているわけではありません。それは、これらの言語のためのタイプシステムの基礎を形成するHindley-Milnerタイプのシステムにとっては難しいでしょう。 (Haskell命名法で)Nothingは、タイプMaybe a[] aを同時に持っていなければなりません。

似たような(しかし、IMO、実際に使用して、残念ながらあまりにも扱いにくいが)Maybe上の固定小数点型を使用して構築することができます。

-- 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) 

これは、あなたが求めているものに同型ですが、aはお尻の痛み。私たちは、短所を簡単に機能させることができます。

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

InOは「アイデンティティコンストラクタ」です - あなたが精神的にそれらを削除することができるように、彼らは唯一、型チェックを導くために存在し、あなたが望むものを持っています。しかし残念ながら、物理的に削除することはできません。

cons機能を簡単に作成できます。私たちはパターンマッチングでとても幸運ではありません。私は他のMLファミリーの言語について話すことはできませんが、IIRCはMuのような高級タイプを表すことさえできません。

+2

あなたは知っている、またはあなたはすべてのMuのごみを忘れて@ハマーが言ったことをすることができます。一口、まだoverengineer :-) – luqui

関連する問題