3

此映射位于 GType 和将 GType 的实例转换为 IO 字符串的函数之间。我正在制作一个函数,该函数接受一个元素并获取该元素的字符串表示形式。

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。我怎样才能让这段代码编译没有错误?我是否以正确的方式解决问题?

如果有人能提出比亚历克的答案更好的答案,我会接受他们的答案。

4

1 回答 1

0

我认为解决这个问题的正确方法是只创建一个toString基于 GType 进行分支的函数。

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
             | ...
于 2016-08-09T01:37:29.710 回答