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 ()、*-修飾子はモナド アクションを実行するのに役立ちますが、その結果は破棄されます