2016-08-17 16 views
3

ハスケルでは、ダブルコロン、すなわち(::)を使用して宣言を入力します(not :: Bool -> Boolなど)。型宣言構文haskellとhaskellのような言語の違い

しかし、多くの言語で、その構文はHaskellに似ています。 elm、agda、 型を宣言するためにコロン(:)を使用します。 not : Bool -> Boolのように。

なぜこれらの言語がhaskellスタイルの型宣言構文を放棄したのですか?

  • (:)は型を宣言するよりも優れていますか?
  • (::)他の用途にもっと適していますか?
  • または(:)は1つの文字が(::)よりも小さいためですか?
+1

FWIWでは、値のレベルと型のレベルの間にもう少し余裕があるため、実際には '::'はトップレベルのシグネチャをよりうまく読み込めると考えています。 'not:Bool - > Bool'は解析されるように見えます。(Boolではありません) - > Bool'です。しかし、既存の中置演算子の多くは同じ問題を抱えています。私はそれが基本的にあなたが慣れていることに関係していると思います。 – leftaroundabout

+0

型注釈が実際の値であるとふりかけると、 '::'はある意味の意味を持ちます。それは他の中核コンストラクタのように ':'で始まり、型注釈の「実」シンボルに先行し、名前と型を引数として与えられ、型注釈を返します。 – chepner

答えて

9

私はSPJは:::間 を選択するための議論の問題だったとどこかで言うのを聞きました。彼とジョンヒューズは最終的に::に定住しました。 からA History of Haskell: Being Lazy With Class紙:

我々はミランダからのデータコンストラクタは変数がない間 は資産計上される規則を採用し、Haskellでコロンで開始する必要があります中置コンストラクタ、のために同様の慣例 を追加しました。 後の慣行は、単一のコロンの私たちの使用(SASL、KRC、およびMirandaから を採用)との一貫性のために選択されました。リスト "cons"の場合 オペレータの場合。 (の選択「:」。短所のためにと、「::」タイプ 署名のために、道で、熱く争わ問題でした(MLが反対 を行う)と、この日の議論の余地)

+0

これを決めるのはSPJとジョン・ヒューズだとは思わない。当初はPhil Wadlerのデザイン(ミランダとオーウェルを模倣していた)でした。そして、Haskell委員会がそれを保管しました。それは残念な選択でした。 – augustss

+0

ええ、私はそれがSPJとワドラーの間にあったと思います。私はおそらく週末までにビデオをリンクしようとします。 – Sibi

10

IIRC ::を使用するハスケルの選択は(不幸な)歴史的事故のビットです。 HaskellはMirandaの大部分を拠点としていましたが、タイプには::も使用されています。 Mirandaの作者は、実際にはcons operatorが:であることを望んでいたので、もっと普遍的に使うと思っていたので、入力オペレータは::に委任されなければなりませんでした。

それ以外の場合、タイプ上のすべての文献(たとえHaskellについて話しているものでも)が:を使用するので、実際には良いアイデアであるとは証明されていません。最も近いpaper at handとして、すべてのサンプル(ハスケル)コードに二重コロンが使用されていますが、数学的判断(10ページなど)はすべて従来のシングルコロンに従います。 (:それはhereでしたが、私は右の時間を得るために全体のことを聞くのが面倒だEDIT)の時には、多くの、それを


は、私がどこかで聞いた覚え考えますFP研究の人々は、ミランダを非常に明確に定義して、怠惰な機能を持つ純粋な言語に関する研究論文が共通の言葉を持って自分のアイデアについて話すことを望んでいました。ミランダのデザイナーはこれを望んでいませんでしたが、ミランダと非常に似ている別の言語でこれが行われたならば、彼らはうまくいくと言っていました(両国の利益のために2つの言語は依然として区別可能です) 。それがハスケル委員会の出発点でした。

+3

私はそれを不幸なものと呼んでいません。それらを逆転させたほうが良いかもしれませんが、これは世界の終わりではなく、一般的な数学表記法とはわずかに異なります(これはタイプ以外の多くの場所でもそうです)。 – Cubic

+0

あなたの脚注は完全に正確ではありません。 – augustss

関連する問題