In GHC-7.7 (und 7.8) geschlossen Familien Typ eingeführt wurden:Geschlossene Familien und Typinferenz in Haskell
Eine geschlossene Familie an einem Ort alle seine Gleichungen definiert hat und nicht verlängert werden kann, während eine offene Familie kann Instanzen über Module verteilt haben. Der Vorteil einer geschlossenen Familie ist, dass seine Gleichungen um, ähnlich einem Begriff Ebene Funktionsdefinition
versucht werden möchte ich Sie fragen, warum der folgende Code kompiliert nicht? GHC sollte in der Lage sein, auf alle Typen zu schließen - GetTheType
ist nur für den Typ X
definiert, und wenn wir die markierte Zeile auskommentieren, wird der Code kompiliert.
Ist dies ein Fehler in GHC oder geschlossenen Typ Familien hat solche Optimierungen noch nicht?
Code:
{-# LANGUAGE TypeFamilies #-}
data X = X
type family GetTheType a where
GetTheType X = X
class TC a where
tc :: GetTheType a -> Int
instance TC X where
tc X = 5
main = do
-- if we comment out the following line, the code compiles
let x = tc X
print "hello"
Und der Fehler ist:
Couldn't match expected type ‛GetTheType a0’ with actual type ‛X’
The type variable ‛a0’ is ambiguous
In the first argument of ‛tc’, namely ‛X’
In the expression: tc X
1. GHC 7.8.X noch nicht freigegeben wird, so ist es ein bisschen zu früh ist, zu nennen es einen Fehler 2. Sind Sie sicher, dass geschlossene Familien gehen der Standard sein und keine Art von Flag oder Pragma erfordern? –
Ich fragte gerade Richard Eisenberg vor einer Woche, sehen Sie die Kommentare an der Unterseite [hier] (http://typesandkinds.wordpress.com/2012/12/22/ordered-overlapping-type-family-instances/). Ich bin auch sehr gespannt auf das Potenzial dort. Ich skizzierte auf Papier die Mechanismen, wie ich denke, dass Inferenz funktionieren sollte, und arbeite mich langsam an die Idee, GHC zu hacken, aber TBH bin mir nicht sicher, dass das in einem vernünftigen Zeitrahmen passieren wird. – jberryman
@ ThomasM.DuBuisson: Wir wissen es noch nicht, aber da diese Funktion in GHC 7.7 verfügbar ist, können wir es testen und einige seiner Verhaltensweisen als Bugs oder nicht. GHC 7.8 sollte bald veröffentlicht werden, denke ich. –