TemplateHaskellを使ってみる2
1と殆ど変わらんけど、前進が大事。
$(do return [FunD (mkName "th_test") [Clause [(LitP $ IntegerL 0)] (NormalB $ LitE $ StringL "zero!") [], Clause [(VarP $ mkName "a")] (NormalB $ LitE $ StringL "other") []]])
これは次のコードと等価
th_test 0 = "zero!" th_test a = "other"
それと、TemplateHaskellにおいては、その定義が書かれたファイル(module)をimportする(かされるか)時に展開/実行されるので同一モジュール内で書いても上手くいきません。
その1でわざわざ別モジュールに分けているのはそういう理由からです。