Typ Familienpolymorphie

8

Also habe ich eine Funktion apply :: proxy tf -> tf Int -> tf Int , die einen Proxy übernimmt, der eine Typfamilie enthalten soll, und wendet Int auf diese Typfamilie an, um den Typ des zweiten Arguments und den Rückgabewert zu bestimmen. Allerdings bekomme ich einige verwirrende Antworten von GHC.

%Vor%

test1 verweigert die Kompilierung mit GHC und spuckt diesen Fehler aus:

%Vor%

Verwirrend, indem man test1 auskommentiert und eine gebundene Bindung in test2 benutzt, macht GHC glücklich und alles ist in Ordnung. Kann mir jemand erklären, was hier vor sich geht?

    
Nick Vladimiroff 24.04.2015, 19:53
quelle

1 Antwort

12
  

Also habe ich eine Funktion apply :: proxy tf -> tf Int -> tf Int , die einen Proxy übernimmt, der eine Typfamilie enthalten soll

Sie können das nicht tun. Typfamilien müssen immer vollständig angewendet werden, wie die Typ-Synonyme, von denen sie eine Generalisierung sind. Eine Typvariable kann nie in eine untergesättigte Typfamilie instanziiert werden.

Es ist ein Fehler in GHC 7.8.3, dass Ihr Programm nicht bereits ab

abgelehnt wurde %Vor%     
Reid Barton 24.04.2015, 20:07
quelle