2016-07-16 4 views
2

として定義された型を呼んでください、次のように定義されたタイプのための特別な名前があります:、何をF#では関数シグニチャ

type Foo = int -> string 

は私が尋ねるようなタイプを持っているように見えるので、特別な意義。それは他の型に比べてかなり抽象的であり、一種の関数インタフェースとしてしか使えないようです。 F#の文献ではあまり議論されていませんが、多くのF#OSSプロジェクトのソースではかなり使用されています。

関数型プログラミングでいくつかの重要な意味を持つ特殊な型ですか?関数のインターフェースの一種として機能する以外のアプリケーションもありますか?型のシグネチャが一致する関数を定義することでそれを行うことはできますが、実際にインスタンス化するのは実際には意味がないのはなぜですか?それとも、他の型のシグネチャ/定義で短い形式として使用できる関数定義のエイリアスであり、すべてのプロパティを記述するのと同じくらい単純ですか?

答えて

5

この種の定義のためにF#ドキュメントで使用されている名前はtype abbreviationです。多くの人がエイリアスと呼んでいることがよくあります。

定義では、より長い型の別名または短い名前を定義します。 Fooと入力すると、コンパイラにはint -> stringと表示されます。

  • タイプ略語はFooint -> stringは(一種の値は、他の型の値である)に等価であることを意味し、新しいタイプを定義しません。重要なポイントは以下のとおりです。

  • 型推論は、一般的に、あなたがタイプと一致する関数を記述するときに、明示的な型注釈に

  • を与えない限り、コンパイルしたときに、コンパイラはint -> stringとしてそれを推測します、元の型を推測します、略語は消去されます(.NETにはそのような概念がないため)。コンパイルされたコードはint -> stringと表示されます。

略語は可読性の理由からだけ有用です。これにより、タイプにわかりやすい名前を使用できます。しかし、他にも多くの意味がありません。

+2

CLRのように省略形は削除されていますが、コンパイルされたライブラリを参照する他のF#コードでは省略できません。 –

関連する問題