Ich habe um mit der fix
Funktion durcheinander, und ich über das passiert ist:Die Bedeutung von Tilde in Haskell-Typen (Typ Gleichheit)
λ let fix f = let x = f x in x
λ fix (+)
<interactive>:15:5:
Occurs check: cannot construct the infinite type: t ~ t -> t
Expected type: t -> t
Actual type: t -> t -> t
Relevant bindings include it :: t (bound at <interactive>:15:1)
In the first argument of ‘fix’, namely ‘(+)’
In the expression: fix (+)
Ich weiß sehr wohl, warum dieser Fehler auftritt, aber ich bemerkte eine lustige Signatur dort oben: t ~ t -> t
. Was bedeutet dieser Typ? Was bedeuten Tilde in Typ-Signaturen innerhalb von Haskell? Wo werden sie benutzt?
Wo würde es verwendet werden, ohne Typfehler? – AJFarmar
@AJFarmar Mit der 'TypeFamilies'-Erweiterung können Sie' ~ 'in Ihren eigenen Typ-Signaturen verwenden, um die Typgleichheit zu definieren, so wie es in dieser Fehlermeldung verwendet wird. Es ist etwas, das Sie bei der Arbeit mit Typ-Synonym-Familien finden, aber es kann nützlich sein, um verschiedene Tricks auf Typenebene zu machen (das eine Beispiel von oben): Sie können "Standard" -Instanzen einer Klasse mit 'bekommen OverlappingInstances' mit 'instance Foo X' und' instance (y ~ Y) => Foo y') – jberryman