14

OAuthにHaskellライブラリを使用していますが、作成者は使用しているタイプのShowを導出しておらず、デバッグ用に印刷できるようにしたいと考えています。そのためにShowを派生させたいと思います。関数を構築する以外に、ライブラリの外部からこれを行う方法はありますか?すべてのレコードフィールドを、Showを派生させるレコードタイプにコピーしますか?

問題のタイプは、Network.OAuth.Consumerからのトークンです。

http://hackage.haskell.org/packages/archive/hoauth/0.3.5/doc/html/src/Network-OAuth-Consumer.html#Token

4

1 に答える 1

21

と呼ばれるGHC拡張機能を使用できますStandaloneDeriving

この拡張機能を使用すると、次のような式を記述できます。

deriving instance Show Token

これを使用するには、

{-# LANGUAGE StandaloneDeriving #-}

ファイルの先頭にあります。

スタンドアロン派生の構文は、句の前後があるinstanceことを除いて、ステートメントの構文と基本的にまったく同じです。これは、次のようなより具体的なインスタンスを記述できることを意味します。derivingwhere

deriving instance Show a => Foo (Maybe a)

また、インスタンスに必要なコンテキストを明示的に指定する必要があります。次のようなスタンドアロンインスタンスを作成する必要があります。

deriving instance Show a => Show (Foo a)

つまり、Show a必要なコンテキストに明示的に注意する必要があります。

これはあなたの場合には出てこないはずですが、それは覚えておくべきことです。

于 2012-10-10T15:20:22.190 に答える