Diese Zuordnung ist zwischen einem GType und einer Funktion, die eine Instanz dieses GType in einen IO-String umwandelt. Ich mache eine Funktion, die ein Element nimmt und eine String-Repräsentation dieses Elements bekommt.Zuordnung von GType zur Funktion Umwandlung eines Typs in einen IO-String
mapping =
[ (Types.gTypeHTMLSourceElement, HTMLSourceElement.getSrc )
, (Types.gTypeHTMLObjectElement, HTMLObjectElement.getData )
, (Types.gTypeHTMLTimeElement , HTMLTimeElement.getDateTime)
, (Types.gTypeHTMLElement , HTMLElement.getInnerText )
, ...
]
gibt diesen Fehler:
Couldn't match type ‘HTMLObjectElement’ with ‘HTMLSourceElement’
I ghcjs-dom verwenden. Wie kann ich diesen Code ohne Fehler kompilieren lassen? Komme ich dem Problem richtig zu?
Wenn jemand besser Antwort als Alec Antwort bekommen kann, werde ich ihre Antwort akzeptieren.
Ich glaube nicht, dass Sie dies der richtige Weg nähern, aber Sie wahrscheinlich zu kompilieren bekommen würde 'RankNTypes' benötigen und fügen Sie' Mapping :: [(GType, forall eine IO (a. - > String))] '. – Alec
@Alec eine bessere Möglichkeit, es zu nähern? Wenn ich basierend auf dem Knotennamen wechselte, wäre es nicht typsicher. – 2426021684
Erneut mein Kommentar gelesen, sollte es wirklich gelesen haben Mapping :: [(GType, für alle a. A -> IO String)]]. Aber in Bezug auf Ihre Frage bin ich mir nicht sicher, was der beste Weg wäre ... Ich denke, Sie könnten eine Typklasse 'class Inhalt a where {getContents :: a -> IO String}' dann Instanzen wie 'instance contents HTMLSourceElement machen wo {getContents = HTMLSourceElement.getSrc} '. – Alec