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

时间:2016-08-06 21:18:33

标签: haskell ghcjs-dom

此映射位于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的答案更好的答案,我会接受他们的回答。

1 个答案:

答案 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
             | ...