IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

FFIの練習 Haskellからcを使う

HaskellにはFFIという仕組みがあり、他言語とバインディングできるようです。言語の枠組みとしては、cだけでなくc++,Javaも視野に入っているようです。

サイン関数で練習してみました。

コードです。

import Foreign.C.Types
 
foreign import ccall "math.h sin" c_sin :: CDouble -> CDouble
h_sin:: Double -> Double
h_sin x = realToFrac $ c_sin $ realToFrac x
main = putStrLn ( show (h_sin 1.0) )

実行結果です。

[ec2-user@ip-XXX-XX-XX-XXX work01]$ runghc ./math01.hs 
0.8414709848078965
[ec2-user@ip-XXX-XX-XX-XXX work01]$ 

sin(1)の結果は、
f:id:naotoogawa:20140408190638p:plain
ですので、プログラムは正しいようです。

印象としては、JavaのJNIより簡単な気がしました。が、試した内容事態が簡単だからそう感じるのかもしれません。
Haskellからc言語を扱うのは大変かなぁと思っていたのですが、これで、心理的障壁はかなり低くなりました。

参考情報
http://differentialengine.wordpress.com/2013/12/02/using-opencv-from-haskell-by-ffi/