Ich habe ein Modul codiert und funktioniert, aber ich kann nicht verwalten, um zwei Funktionssignaturen für sie eingeben, weil ich die TypeFamilies
Erweiterung für das Modul aktivieren muss, und wenn ich mach das, es baut nicht mehr auf.aktiviert TypFamilies macht den Code nicht mehr zu bauen
Für eine von ihnen brauche ich TypeFamilies
, weil es persisent/esqueleto functions verwendet.
Der richtige Typ wäre, glaube ich:
getByIds :: (PersistEntityBackend a ~ SqlBackend) =>
EntityField a (Key a) -> [Key a] -> SqlPersistM [Entity a]
(ghc schlägt eine allgemeinere Signatur)
Der andere nutzt hsqml.
ghc schlägt vor, diese Unterschrift, aber ich denke, es könnte vereinfacht werden:
prop :: forall tr b.
(Marshal tr, Typeable b, MarshalMode tr ICanReturnTo() ~ Yes) =>
String -> (b -> tr) -> Member (GetObjType (ObjRef b))
Unterm Strich ist, dass ohne TypeFamilies
ich nicht jene Unterschriften schreiben kann. In dem Moment, in dem ich TypeFamilies
aktiviere, wird der Code jedoch nicht erstellt, und ich verstehe nicht warum. Der Fehler sieht aus, dass einige polymorphe Funktionen plötzlich monomorph wurden.
Die Fehlerausgabe ist relativ lang, Sie finden sie here.
Ich habe TypeFamilies
in mehreren anderen Modulen der Anwendung ermöglicht, ohne Probleme, und das ermöglicht es mir Signaturen sowohl die ohne Probleme SqlBackend
& ICanReturnTo
Einschränkungen verwenden zu schreiben.
Gibt es etwas falsch mit diesem Modul, das verhindert, dass es mit TypeFamilies
bauen? Oder sollte ich noch eine Erweiterung aktivieren, um es zu beheben? Ich habe nicht erwartet, dass diese Erweiterung nur die Kompilierung unterbrechen würde.
Was ist los mit GHC generalisiertem Typ? Wenn es auf GHC funktioniert, sollte es gut kompilieren. – AJFarmar