Diese Frage ist nicht subjektiv. In dem Buch, auf das verwiesen wird, wird ein sehr spezifisches Verb verwendet, und ich würde gerne verstehen, was die Implikation dieser Formulierung bedeutet, weil ich befürchte, etwas falsch zu verstehen.
Aus Learn You a Haskell ist der folgende Absatz der dritte und letzte, der "wir nehmen an *" enthält.
data Barry t k p = Barry { yabba :: p, dabba :: t k }Und jetzt wollen wir es zu einer Instanz machen
Functor.Functorwill Arten von Art* -> *,Barrysieht aber nicht so aus, als hätte es diese Art. Was ist die Art vonBarry? Nun, wir sehen, es werden drei Typparameter benötigt, also wird es so seinsomething -> something -> something -> *. Man kann mit Sicherheit sagen, dass diespein konkreter Typ ist und somit eine Art hat*. Dennkwir nehmen an*und haben damit im weiteren Sinneteine Art* -> *. Ersetzensomethingwir nun einfach diese Arten durch die s, die wir als Platzhalter verwendet haben, und wir sehen, dass es eine Art von hat(* -> *) -> * -> * -> *.
Warum nehmen wir überhaupt etwas an? Beim Lesen von "Wir nehmen X an (dh wir nehmen an, dass X wahr ist)" ist es für mich selbstverständlich zu denken, dass wir auch den Fall berücksichtigen sollten, dass X falsch ist. Konnte im konkreten Fall des Beispiels nicht tvon Art (* -> *) -> *und kArt sein (* -> *)? Wenn dies der Fall wäre, was auch immer tund ktatsächlich t kwäre , wäre es immer noch ein konkreter Typ, nein?
Ich sehe, dass die gesamte Argumentation dann mit dem Compiler verglichen wird, aber ich glaube nicht, dass der Compiler davon ausgeht . Wenn ja, würde ich gerne wissen, was, wenn nicht, dann fürchte ich, dass mir die Bedeutung des Absatzes fehlt.
k :: Lfür jede Art habenL, solanget :: L -> *. Ein Compiler muss hier jedoch eine bestimmte auswählenLoder auf ein Polykind zurückgreifen. Ein Polykind wäre die allgemeinste Option, aber hier wählt GHCL = *(Basic Haskell hat keine Polykinds, sie müssen als Erweiterung aktiviert werden). Da LYAH etwas wählt, das eher willkürlich ist, verwendet es das Wort "annehmen" (AFAICT).