Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 将Ptr()转换为SourceCompletionProvider_Haskell_Gtk2hs - Fatal编程技术网

Haskell 将Ptr()转换为SourceCompletionProvider

Haskell 将Ptr()转换为SourceCompletionProvider,haskell,gtk2hs,Haskell,Gtk2hs,我已经部分地解决了这个问题 现在,我可以通过绑定GObject注册GObject子类型(请参阅) 我可以使用函数实现SourceCompletionProvider(但尚未尝试) 唯一的问题是将c'g_object_newv返回的Ptr()转换为gtk2hs数据类型SourceCompletionProvider。我怎么做?有什么提示吗 SourceCompletionProvider的定义如下: newtype SourceCompletionProvider = SourceCompleti

我已经部分地解决了这个问题

现在,我可以通过
绑定GObject
注册
GObject
子类型(请参阅) 我可以使用函数实现
SourceCompletionProvider
(但尚未尝试)

唯一的问题是将
c'g_object_newv
返回的
Ptr()
转换为
gtk2hs
数据类型
SourceCompletionProvider
。我怎么做?有什么提示吗

SourceCompletionProvider
的定义如下:

newtype SourceCompletionProvider = SourceCompletionProvider (ForeignPtr (SourceCompletionProvider))
这个定义是什么意思?为什么它是递归的?提供者是提供者的
外来PTR
——对我来说很奇怪

谢谢

解决方案:

makeNewGObject mkGObject $ castPtr <$> c'g_object_newv myObType 0 nullPtr
makeNewGObject mkGObject$castPtr c'g_object_newv myObType 0 nullPtr

外部的
SourceCompletionProvider
是必需的,因为这是一个新类型,而内部的
SourceCompletionProvider
只是一个标记,用于区分此外部指针与指向其他类型的指针。如果您查看,它是
data Ptr a=Ptr Addr#
-
a
是一种幻影类型,不会出现在右侧,因此定义实际上不是递归的

您可以使用将
Ptr()
转换为
ForeignPtr()
,然后使用将其转换为
ForeignPtr SourceCompletionProvider


编辑:在详细了解了这一点之后,我认为要实现这一点,您需要首先使用上述方法将
Ptr
转换为
GObject
,然后使用
unsecastgobject
。但未测试。

外部
SourceCompletionProvider
是必需的,因为这是一个新类型,而内部
SourceCompletionProvider
只是一个标记,用于区分此外部指针与指向其他类型的指针。如果您查看,它是
data Ptr a=Ptr Addr#
-
a
是一种幻影类型,不会出现在右侧,因此定义实际上不是递归的

您可以使用将
Ptr()
转换为
ForeignPtr()
,然后使用将其转换为
ForeignPtr SourceCompletionProvider


编辑:在详细了解了这一点之后,我认为要实现这一点,您需要首先使用上述方法将
Ptr
转换为
GObject
,然后使用
unsecastgobject
。不过,没有经过测试。

嗯。。。我想我需要添加终结器,对吗?我可以用
p'g_object\u unref
作为终结器,这足够了吗?从我看了之后可以看出,你是对的。嗯。。。我想我需要添加终结器,对吗?我可以使用
p'g_object\u unref
作为终结器,这足够了吗?从我看到的情况来看,你是对的。