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
| ...
此映射介于 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
| ...