【发布时间】:2012-05-10 04:16:54
【问题描述】:
我正在将 FFI 写入 pdflib。 Pdflib C API 有很多函数可以将各种句柄(文档、页面、图像、字体)作为纯整数(不是指针)返回和/或获取。
为了确保我不会不小心将错误的参数传递给函数,我以以下形式创建了一堆新类型:
newtype PdiDoc = PdiDoc Int
newtype PdiPage = PdiPage Int
newtype PdfImage = PdfImage Int
newtype PdfFont = PdfFont Int
现在我需要为这些类型提供一个编组器。
image2c (PdfImage i) = fromIntegral i
font2c (PdfFont f) = fromIntegral f
pdipage2c (PdiPage i) = fromIntegral i
如您所见,编组器完全相同,只是针对不同的类型。
所以我的问题是,是否有某种类型的魔法,SYB vodoo 技巧,我可以使用一个函数来编组所有这些类型,还是我必须为不同的新类型一次又一次地编写相同的函数?
编辑:我接受了唐的回答,因为它解决了我的问题。
我打开了
GeneralizedNewtypeDeriving
添加
deriving (Eq, Ord, Num, Enum, Real, Integral)
到我的每个新类型,现在我可以使用标准 fromIntegral 来编组所有这些。
Nathan Howell 的回答也是正确的,我赞成。但不幸的是,他的解决方案意味着放弃像我正在使用的 c2hs 这样的 FFI 预处理器。
【问题讨论】: