Haskell から C を呼ぶ (FFI)
Haskell から C 言語で書いた関数を呼ぶには。http://haskell.g.hatena.ne.jp/jmk/20060622/1150947486を見れば完璧だが、とりあえずこれだけでいいよ、という最小サンプル的な意味でメモ。
factorial.hs
{-# LANGUAGE ForeignFunctionInterface #-} import Foreign.C.Types foreign import ccall "fact.h fact" c_fact :: CInt -> IO Int main = c_fact 10 >>= print
fact.h
#ifndef __FACT_H__ #define __FACT_H__ int fact(int n); #endif
fact.c
#include "fact.h" int fact(int n) { if (n <= 1) return 1; else return n * fact(n-1); }
コンパイル
$ ghc fact.c factorial.hs -o fact $ ./fact 3628800 $
ファイル名を fact.c と fact.hs にしたらリンクのときに名前がぶつかった。