THその5とかだっけ

そのまま書くと、このクソ記事がググった時に上位に出て来ると困るので略称で。(まぁLanguage.Haskell.THにもなってるからちゃんとした略称ですが)


THにはちょっと不便な事に、関数の引数でリストパターンを素直に使う事が出来ません。
例えば

tuple2 (a:b:[]) = (a,b)

みたいな。


リストはHaskellのdataとしてちゃんと定義されているので、その辺の事が分かっていれば上の関数をTHを使って

LamE [InfixP (VarP $ mkName "a") (mkName "GHC.Base.:") (InfixP (VarP $ mkName "b") (mkName "GHC.Base.:") (ConP (mkName "GHC.Base.[]") []))] (TupE [VarE $ mkName "a",VarE $ mkName "b"])

と書く事が出来ます。