8
Byłem pałować z funkcją fix
, a ja się po drugiej stronie to:Znaczenie tyldy w Haskell typy (równości Type)
λ 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 (+)
dobrze wiem, dlaczego ten błąd występuje, ale zauważyłem tam zabawny podpis: t ~ t -> t
. Co oznacza ten typ? Co oznacza tylda w podpisach typu w haskell? Gdzie są one używane?
Gdzie byłby używany, nie licząc błędów? – AJFarmar
@AJFarmar Rozszerzenie 'TypeFamilies' pozwala używać' ~ 'we własnoręcznych sygnaturach do oznaczania równości typów, w taki sam sposób, w jaki jest używany w tym komunikacie o błędzie. Jest to coś, czego szukasz podczas pracy z rodzinami synonimów typów, ale może być użyteczne samodzielnie do wykonywania różnych sztuczek na poziomie (jeden przykład z mojej głowy: możesz uzyskać "domyślne" wystąpienia klasy z ' OverlappingInstances' za pomocą 'instance Foo X' i' instance (y ~ Y) => Foo y') – jberryman