Haskell の GeneralizedNewtypeDeriving メカニズムは優れています。見ていない人のために、次のように書いてください。
newtype SkewOptT α = SkewOptT (StateT Bool α)
deriving (Applicative, Functor, Monad, MonadTrans)
のようなインスタンスを自動的に生成します。
instance [overlap ok] Monad => Monad (SkewOptT )
ただし、私の型クラスの 1 つで、いくつかのメソッドをカスタマイズしたいと考えています。これらのメソッドに対して GeneralizedNewtypeDeriving が行うことをオーバーライドまたは無効にする方法はありますか? for
型クラスは、(ループ)、parfor
(並列ループ)、 (新しい関数の追加)などのいくつかの基本的な DSL 命令をエンコードしますfcndef
が、それを複数の型クラスに分割する完全な方法はありません [その後、自動的に派生します。一方は手動で作成し、もう一方は手動で記述します]。