2012-01-11 40 views
1

我维持在http://hackage.haskell.org/package/augeasHaskell的FFI图书馆间的依赖关系

的augeas FFI库最近augeas加入aug_to_xml method包括与从libmxl2类型的xmlNode的参数。它看起来像是libxml是libxml2的FFI库,但它有一段时间没有更新,并且看起来没有Debian打包,所以我犹豫是否将它作为依赖项添加到augeas FFI库中。

所以我的问题是,当我添加这个函数的FFI支持,将依赖关系添加到libxml,这可能会导致稍后打包问题,或者更好地使用类似opaque type之类的东西FFI食谱,所以没有馆际依赖?

如果我使用opaque类型的方法,并且用户希望自己使用libxml,他们是否可以将我的类型转换为Text.XML.LibXML.Node?

+0

最后上传libxml的时间是三年半前。这可能是一个被遗弃的项目。在将其作为依赖关系添加之前,请与维护人员核对。 – 2012-01-11 14:25:01

回答

1

不透明的类型可能是最好的路线在这里,如果你想包含的功能,但我很怀疑,包括一个函数,只有不安全的强迫另一个库的类型(这将是确实有可能使用的,是的,但是依赖于libxml绑定的内部表示不会改变 - 有风险)。

我会建议根本不添加该功能;如果有人想使用它,他们可以很容易地自行导入它,如果你的绑定是直接的,那么他们可能很容易将它与绑定的类型一起使用。当然,如果它可能是常用的,你可以很容易地将它自己捆绑成一个包,虽然我非常怀疑一个包是在2008年最后更新的,甚至没有建立在GHC 6.12之上的版本将会得到很多用途。

所以,我只是省略了你的绑定函数,或者如果你真的想包含它,使用不透明类型。

+0

我是不透明的类型,主要是为了完整性(我不想让函数离开API)。 http://stackoverflow.com/questions/4794644/storable-empty-data-declaration结束了相当有帮助。我使用EmptyDataDecls并将XmlNode定义为一个Storable实例,它只有一个对齐ans sizeOf,按照http://www.haskell.org/haskellwiki/FFICookBook#Working_with_structs – pwan 2012-01-26 14:04:34