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でわざわざ別モジュールに分けているのはそういう理由からです。