Преобразовать 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, Не проверено, хотя.

Другие вопросы по тегам