我正在查看haskell-mpi 绑定,例如,我们有这个签名mpi.h
:
int MPI_Initialized (int *flag);
其中 inInternal.chs
表示如下:
{#fun unsafe Initialized as ^ {alloca- `Bool' peekBool*} -> `()' discard*- #}
问:我在理解输入参数周围发生的事情时遇到了一些麻烦:
-
修改器在做什么?c2hs wiki 说“Hs 函数的参数类型由所有编组规范的集合决定,其中 in 编组器后面没有减号”,但我仍然不明白。C 函数需要一个指向
int
; 输出编组器在做什么?AFAICT,它取消引用指针并将结果转换为布尔值。这个对吗?
注意:MPI_
前缀在函数名中由 a 引入{# context prefix="MPI"#}
。
NB2:
peekBool :: (Storable a, Num a, Eq a) => Ptr a -> IO Bool
peekBool = liftM toBool . peek
NB3: discard _ = return ()
,并且*-
修饰符用于运行一元动作但丢弃其结果