haskell-mpi bindingを見ていると、たとえば次のような署名がありmpi.h
ます:
int MPI_Initialized (int *flag);
これInternal.chs
は次のように表されます。
{#fun unsafe Initialized as ^ {alloca- `Bool' peekBool*} -> `()' discard*- #}
Q: 入力パラメータの周りで何が起こっているのか理解できません:
-
モディファイヤは何をしているの?c2hs wiki には、「Hs 関数の引数の型は、in マーシャラーの後にマイナス記号が続かないすべてのマーシャリング仕様のセットによって決定される」と書かれていますが、まだわかりません。C 関数は へのポインタを取ります
int
。出力マーシャラーは何をしていますか? AFAICT、ポインターを逆参照し、結果をブール値に変換します。これは正しいです?
注意:MPI_
プレフィックスは、関数名で a によって導入されます{# context prefix="MPI"#}
。
注意2:
peekBool :: (Storable a, Num a, Eq a) => Ptr a -> IO Bool
peekBool = liftM toBool . peek
NB3: discard _ = return ()
、*-
修飾子はモナド アクションを実行するのに役立ちますが、その結果は破棄されます