Преобразовать Ptr () в SourceCompletionProvider
Я частично решил предыдущий вопрос.
Прямо сейчас я могу зарегистрироваться GObject
подтип через bindings-gobject
(см. hpase) я могу реализовать SourceCompletionProvider
используя функцию c'g_type_add_interface_static (но еще не пробовал).
Единственная проблема - конвертировать Ptr ()
, возвращенный c'g_object_newv
, чтобы gtk2hs
тип данных SourceCompletionProvider
, Как мне это сделать? Есть намеки?
SourceCompletionProvider
определяется как:
newtype SourceCompletionProvider = SourceCompletionProvider (ForeignPtr (SourceCompletionProvider))
Что означает это определение? Почему это рекурсивно? Провайдер ForeignPtr
провайдеру - выглядит странно для меня.
Благодарю.
Решение:
makeNewGObject mkGObject $ castPtr <$> c'g_object_newv myObType 0 nullPtr
1 ответ
Внешний SourceCompletionProvider
требуется, так как это новый тип, а внутренний SourceCompletionProvider
это просто маркер, чтобы отличить этот внешний указатель от указателей на другие типы. Если вы посмотрите на определение Ptr a
, его data Ptr a = Ptr Addr#
- a
является фантомным типом, который не отображается справа, поэтому определение на самом деле не является рекурсивным.
Вы можете конвертировать Ptr ()
в ForeignPtr ()
с помощью newForeignPtr_
а затем бросить его ForeignPtr SourceCompletionProvider
с castForeignPtr
,
редактировать: посмотрев на это немного больше, я думаю, что для этой работы вам нужно сначала конвертировать ваши Ptr
в GObject
с методом, описанным выше, а затем используйте unsafeCastGObject
, Не проверено, хотя.