Ich versuche, eine Typklasse zu schreiben, die das Schreiben eines CRUD-Backends mit persistent , aeson und sotty
vereinfachtHier ist meine Idee:
%Vor%Dies kompiliert nicht, ich bekomme diesen Fehler:
%Vor% Es sieht so aus, als müsste ich eine weitere Typ-Einschränkung hinzufügen, etwas wie PersistMonadBackend m ~ PersistEntityBackend a
, aber ich sehe nicht wie.
Die Einschränkung bedeutet, dass der zugehörige Backend-Typ für PersistEntity
muss Instanz SqlBackend
sein. Wenn ein Benutzer die PersistEntity
-Klasse als Teil der Implementierung der CRUD
-Klasse implementiert, müssen sie dies angeben.
Aus Ihrer Sicht müssen Sie nur die Erweiterung TypeFamilies
aktivieren und diese Einschränkung zu Ihrer Klassendefinition hinzufügen:
Wenn eine Instanz von PersistEntity
für einen Typ Foo
definiert wird, muss der Benutzer von CRUD
den Typ PersistEntityBackend
als SqlBackend
definieren:
Hier ist meine vollständige Kopie Ihres Codes, der den GHC-Typ-Checker besteht:
%Vor%Tags und Links haskell persistent yesod crud