此映射位于GType和将该GType的实例转换为IO String的函数之间。我正在创建一个函数,它接受一个元素并获取该元素的字符串表示。
mapping =
[ (Types.gTypeHTMLSourceElement, HTMLSourceElement.getSrc )
, (Types.gTypeHTMLObjectElement, HTMLObjectElement.getData )
, (Types.gTypeHTMLTimeElement , HTMLTimeElement.getDateTime)
, (Types.gTypeHTMLElement , HTMLElement.getInnerText )
, ...
]
给出了这个错误:
Couldn't match type ‘HTMLObjectElement’ with ‘HTMLSourceElement’
我正在使用ghcjs-dom。如何在没有错误的情况下编译此代码?我是否以正确的方式解决问题?
如果有人能够提出比Alec的答案更好的答案,我会接受他们的回答。
答案 0 :(得分:0)
我认为解决问题的正确方法是只创建一个基于GType进行分支的toString
函数。
toString :: GObjectClass obj => obj -> IO String
toString obj | obj `isA` gTypeHTMLSourceElement = getSrc . castToHTMLSourceElement
| obj `isA` gTypeHTMLObjectElement = getData . castToHTMLObjectElement
| obj `isA` gTypeHTMLTimeElement = getDateTime . castToHTMLTimeElement
| obj `isA` gTypeHTMLElement = getInnerText . castToHTMLElement
| ...