OAuthにHaskellライブラリを使用していますが、作成者は使用しているタイプのShowを導出しておらず、デバッグ用に印刷できるようにしたいと考えています。そのためにShowを派生させたいと思います。関数を構築する以外に、ライブラリの外部からこれを行う方法はありますか?すべてのレコードフィールドを、Showを派生させるレコードタイプにコピーしますか?
問題のタイプは、Network.OAuth.Consumerからのトークンです。
OAuthにHaskellライブラリを使用していますが、作成者は使用しているタイプのShowを導出しておらず、デバッグ用に印刷できるようにしたいと考えています。そのためにShowを派生させたいと思います。関数を構築する以外に、ライブラリの外部からこれを行う方法はありますか?すべてのレコードフィールドを、Showを派生させるレコードタイプにコピーしますか?
問題のタイプは、Network.OAuth.Consumerからのトークンです。
と呼ばれるGHC拡張機能を使用できますStandaloneDeriving
。
この拡張機能を使用すると、次のような式を記述できます。
deriving instance Show Token
これを使用するには、
{-# LANGUAGE StandaloneDeriving #-}
ファイルの先頭にあります。
スタンドアロン派生の構文は、句の前後があるinstance
ことを除いて、ステートメントの構文と基本的にまったく同じです。これは、次のようなより具体的なインスタンスを記述できることを意味します。deriving
where
deriving instance Show a => Foo (Maybe a)
また、インスタンスに必要なコンテキストを明示的に指定する必要があります。次のようなスタンドアロンインスタンスを作成する必要があります。
deriving instance Show a => Show (Foo a)
つまり、Show a
必要なコンテキストに明示的に注意する必要があります。
これはあなたの場合には出てこないはずですが、それは覚えておくべきことです。