GType 映射到将类型转换为 IO 字符串的函数

Map of GType to function transforming a type to an IO String

此映射介于 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。我怎样才能让这段代码编译无误?我是否以正确的方式解决问题?

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

我认为解决这个问题的正确方法是只创建一个 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
             | ...