:種類レベルのかっこはどういう意味ですか?私は以下の種類を理解して
String :: *
[] :: * -> *
(->) :: * -> * -> *
(,) :: * -> * -> *
しかし、この種は何を意味し、それがどのようなタイプを表すのでしょうか?
? :: (* -> *) -> *
:種類レベルのかっこはどういう意味ですか?私は以下の種類を理解して
String :: *
[] :: * -> *
(->) :: * -> * -> *
(,) :: * -> * -> *
しかし、この種は何を意味し、それがどのようなタイプを表すのでしょうか?
? :: (* -> *) -> *
? :: (* -> *) -> *
あなたは親切* -> *
の?
何かに与えれば、あなたがタイプ(種類*
の何かを)取り戻すだろうことを意味します。具体的な例を取ってみましょう:Int
を含むことを意味します。私は、基礎となるデータ構造としてリスト、セット、または私が欲しいもの(のようなもの* -> *
)でIntContainer
Sを作ることができます。ただし、f
はタイプではありません。タイプになる前に別のタイプを適用する必要があります。それで:IntContainer
に何かが適用される必要があります。それには、それに適用されるタイプが必要です。
ghci> :kind IntContainer
IntContainer :: (* -> *) -> *
私はIntContainer
に優しい* -> *
のものを適用することにより、具体的な種類を作ることができます: `データIntContainerのF = IC(F INT)`:
ghci> ic1 = IC [1,2,3]
ic1 :: IntContainer [] -- [] :: * -> *
ghci> ic2 = IC (Data.Set.fromList [1,2,3])
ic2 :: IntContainer Set -- Set :: * -> *
ghci> ic3 = IC (Data.Sequence.fromList [1,2,3])
ic3 :: IntContainer Seq -- Seq :: * -> *
タイプコンストラクタをパラメータとして持つ親和性の高い型。今私には明らかです。私の防衛では、 '(* - > *) - > * 'のような種類の注釈は、抽象度がかなり高いとしか言えません。ありがとうございました! – ftor
ここでは不自然な例です。次に、IC [1,2,3]やIC(Data.Set.List [1,2,3])のような値を持つことができます。 'IntContainer ::(* - > *) - > *'に注意してください。 – Alec
最初の型パラメータとして、より高級な型を渡したとします。 –
@WillemVanOnsem: '* - > *'は、より上位の型ではありません。 '(* - > *) - > *'は高次関数がパラメータとして関数を取るように、上位型は型コンストラクタをパラメータとして取ります。 –