Я делаю небольшой пакет, который определяет оболочки для кортежей и добавляет из них экземпляры, например
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? (я бы предпочел автоматизированный способ, если это возможно.)