Карта GType для функции, преобразующей тип в строку ввода-вывода
Эта карта находится между GType и функцией, которая преобразует экземпляр этого GType в строку ввода-вывода. Я делаю функцию, которая принимает элемент и получает строковое представление этого элемента.
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. Как я могу получить этот код для компиляции без ошибок? Правильно ли я подхожу к проблеме?
Если кто-то может придумать ответ лучше, чем ответ Алека, я приму его ответ.
1 ответ
Решение
Я думаю, что правильный способ подойти к проблеме - это просто 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
| ...