2017-06-20 5 views
2

ラムダドキュメントを理解しようとしていますので、ファンクタがhereであることを調べましたが、この意味では~>は何ですか?ファンクターの説明で〜>とは何ですか?

map :: Functor f => f a ~> (a -> b) -> f b 
+0

https://stackoverflow.com/questions/43435656には短い回答があり、詳細はhttps://stackoverflow.com/questions/40361059をご覧ください。 –

答えて

2

それはすでにそこに書かれています:

型シグネチャ表記

〜>(波線矢印)メソッドの型コンストラクタ。関数がオブジェクトの プロパティである場合、メソッドと呼ばれます。すべてのメソッドには の暗黙のパラメータ型があります。これらの型はプロパティの型です。 a〜> a - > aは、a型のオブジェクトのメソッドで満たされ、a型をaとし、a型の値を返す型です。

+0

最初の 'f'がファンクタであれば、' a'と 'b'の前に' f'がありますか? – stackjlei

+0

初期ビット( 'Functor f =>')は、定義の残りの部分を制約します。 'f ::'はリスト(本当に配列)のような任意のFunctor型を表すことができます: 'map :: [a]〜>(a - > b) - > [b]'(リストは非常に一般的なので、 'Array x':' [x] 'の省略形)。あるいは、おそらく' map:たぶんa〜>(a - > b) - >おそらくb'です。将来: 'map :: Future a〜>(a - > b) - >未来b'。 Ramdaのバージョンは*メソッド*、* only * functions *を扱わないので、これらは少し変更されます。 'map ::(a - > b) - > [a] - > [b]'です。しかし、それは同じ原則です。 –

+1

すべての 'f 'は、同じ型のコンストラクタ(またはパラメータ化された型)を表します。 'f'の最初の出現は、型コンストラクタ' f'がファンクション制約を有すると言うだけであり、すなわち 'f'のインスタンスは適切な' map'演算を定義しなければならない。指定された型シグネチャがこの 'map'オペレーションのジェネリック版に注釈を付けるだけであることはおそらく分かりにくいでしょう。したがって、 'f'のインスタンスは' map'演算を必要とし、 'map'自体は第2引数として' f'のインスタンスを期待します。 – ftor

関連する問題