HaskellでCプリプロセッサを使う

これくらいしかできませんでしたが・・・。


data.txt

ls = [1, 2, 3]

main.hs

{-# LANGUAGE CPP #-}

#define MY_CONSTANT 2

#include "data.txt"

main = do
        print MY_CONSTANT
        print ls
2
[1,2,3]

まず、単純なdefineは問題なくできました。


data.txtは、最初単なるCSVにして

ls = [
     #include "data.txt"
     ]

と書けるかな、と思ったらパースエラーになりました。
ちなみにdata.txtは、main.hsと同じディレクトリに置いてあります。


インクルードのパスを通すには、GHCのコマンドラインオプションの-Iを使います。

  • Idir

Specify a directory in which to look for #include files, in the usual C way.

http://www.haskell.org/ghc/docs/7.0.4/html/users_guide/options-phases.html

こんな感じになります。

ghc main.hs -IC:\Library\Boost\trunk\boost-svn

Boost.PPで遊ぼうとしたらことごとくパースエラーになったので挫折しました。


追記(2012/02/24 11:55):


動きました!


data.txt

    1, 2, 3

main.hs

{-# LANGUAGE CPP #-}

#define MY_CONSTANT 2

ls = [
#include "data.txt"
     ]

main = do
        print MY_CONSTANT
        print ls
2
[1,2,3]