この質問は主観的ではありません。参照されている本では非常に具体的な動詞が使用されています。私は何かを誤解しているのではないかと思うので、その表現の意味が何であるかを理解したいと思います。
あなたを学びハスケル、次の段落は、「我々は仮定含む第3の最後の一つです*」。
data Barry t k p = Barry { yabba :: p, dabba :: t k }そして今、それをのインスタンスにしたいと思います
Functor。Functor種類の種類* -> *がBarry必要ですが、その種類があるようには見えません。どんな種類Barryですか?まあ、それは3つの型パラメーターを取るので、それはになるでしょうsomething -> something -> something -> *。これpは具体的なタイプであり、一種のを持っていると言っても安全です*。のためにk、我々は*、したがって、拡張によってt、一種のを持っていると仮定し* -> *ます。次に、これらの種類を、somethingプレースホルダーとして使用したに置き換えるだけで、種類がであることがわかり(* -> *) -> * -> * -> *ます。
なぜ私たちは何かを仮定しているのですか?「Xを仮定する(つまり、Xがtrueであると仮定する)」と読むと、Xがfalseの場合も考慮する必要があると考えるのは自然なことです。例の具体的なケースでは、できなかったt種類のもの(* -> *) -> *とk種類の(* -> *)?これが事実であったとしてもt、k実際にそうであったとしても、t kまだ具体的なタイプでしょうか?
その後、推論のすべての行がコンパイラーに対してチェックされることがわかりますが、コンパイラーが想定しているとは思いません。もしそうなら、私はそれが何であるか知りたいのですが、もしそうでなければ、私はその段落の意味を見失っていると思います。
k :: L、あらゆる種類のためにL限り、t :: L -> *。ただし、ここでのコンパイラは、特定のを選択するかL、多種多様な手段に頼らなければなりません。ポリキンドが最も一般的なオプションですが、ここではGHCが選択しますL = *(基本的なHaskellにはポリキンドがありません。拡張機能としてオンにする必要があります)。それはかなり恣意的なものを選択するので、LYAHは「仮定」(AFAICT)という単語を使用します。