タプルのラッパーを定義し、それらからインスタンスを追加する小さなパッケージを作成しています。
newtype Tuple2 a = Tuple2 { untuple2 :: (a, a) }
deriving (...)
tuple2 :: a -> a -> Tuple2 a
tuple2 = ...
instance Traversable Tuple2 where ...
instance Foldable Tuple2 where ...
instance Functor Tuple2 where ...
instance Applicative Tuple2 where ...
これが 2 から15まで繰り返されるので、Template Haskell の仕事のように見えます。
生成されるコードは常に Haskell 98 互換なので、最終結果も Haskell 98 互換のパッケージにしたいと考えています。Template Haskell を使用してコードを生成し、それから TH 自体を使用しないパッケージを作成することは可能ですか? (可能であれば、自動化された方法が望ましいです。)