Отличный механизм Haskell GeneralizedNewtypeDeriving; для тех, кто этого не видел, пишет что-то вроде
newtype SkewOptT ? α = SkewOptT (StateT Bool ? α)
deriving (Applicative, Functor, Monad, MonadTrans)
автоматически генерирует такие экземпляры, как,
instance [overlap ok] Monad ? => Monad (SkewOptT ?)
Однако для одного из моих классов типов я хочу настроить несколько методов. Есть ли способ переопределить или отключить то, что GeneralizedNewtypeDeriving делает для этих методов? Класс типов кодирует некоторые базовые инструкции DSL, такие как for
(цикл), parfor
(параллельный цикл), fcndef
(добавление новой функции) и т. Д., И не существует идеального способа его разделения. до нескольких классов типов [и затем автоматически выводит один и вручную записывает другой].