转换PTR()来SourceCompletionProvider(Convert Ptr () to

2019-07-31 17:43发布

我已经解决了上一个局部问题。

现在我能够注册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

Answer 1:

SourceCompletionProvider要求,因为这是一个NEWTYPE,内SourceCompletionProvider仅仅是从指针到其它类型的这种外来指针区分的标记。 如果你看的定义Ptr a ,它的data Ptr a = Ptr Addr# - a是不会在右侧出现一个幻象类型,所以定义实际上不是递归。

您可以转换一个Ptr ()ForeignPtr ()使用newForeignPtr_ ,然后将其转换为ForeignPtr SourceCompletionProvidercastForeignPtr

编辑:在这找多一点之后,我觉得做这个工作,你需要先转换你的PtrGObject与上面介绍的方法,然后使用unsafeCastGObject 。 没测试过,虽然。



文章来源: Convert Ptr () to SourceCompletionProvider