2011-11-09 21 views
6

GHCiで基本的に状態ダンプを取得する方法はありますか?これにより、私はリストを意味します:GHCi環境ダンプ

  • すべての読み込まれた演算子は、その優先順位、結合性、および署名とともに使用されます。
  • すべてのロードされたクラス。
  • ロードされたすべてのデータ、タイプ、およびnewtypeは、それらのインスタンスであるクラスとともにロードされます。
  • すべての読み込まれた関数はそのシグネチャとそれが属する場合に属するクラスです。

これが可能であると仮定すると、これは実行時に、例外時などにも可能ですか?

答えて

4

:browseこの情報のほとんどを提供します。これは、

  • 関数と演算子の型シグネチャを示します。
  • クラスとそのメソッド。
  • コンストラクタが有効範囲内にある場合は、データ型、newtypesおよびtype同義語を使用します。

引数を指定しないと、現在ロードされているモジュールの情報が表示されます。別のモジュールを指定することもできます。

Prelude> :browse Control.Applicative 
class (Functor f) => Applicative f where 
    pure :: a -> f a 
    (<*>) :: f (a -> b) -> f a -> f b 
    (*>) :: f a -> f b -> f b 
    (<*) :: f a -> f b -> f a 
... 

:infoを使用し、優先順位と結合演算子のため、ならびにデータ・タイプのインスタンスを含む、詳細を参照します。

Prelude> :info (^) 
(^) :: (Num a, Integral b) => a -> b -> a -- Defined in GHC.Real 
infixr 8^
Prelude> :info Bool 
data Bool = False | True -- Defined in GHC.Bool 
instance Bounded Bool -- Defined in GHC.Enum 
instance Enum Bool -- Defined in GHC.Enum 
instance Eq Bool -- Defined in GHC.Base 
instance Ord Bool -- Defined in GHC.Base 
instance Read Bool -- Defined in GHC.Read 

これらのコマンドは、デバッグ中にも使用できます。

詳細については、:helpまたはthe GHCi chapter of the GHC user's guideを参照してください。

+0

モジュールだけでなくシステム全体でこのようなことが欲しいです。 –

+2

@VansonSamuel: ':browse * Module'という形式があります。このモジュールには、そのモジュール内のスコープ内の情報、つまりすべてのインポートとそのエクスポートが表示されます。おそらくそれはあなたが必要とするものに近いでしょうか? – hammar

+0

私はこれを試してみます。ありがとう@ハマールこれはあなたが私を助けた4番目の質問のようなものです。 :-) –

1

この情報を取得する方法はあります。問題は、私の知る限りでは、正確にあなたが望むようにそれをフィルタリングする方法がない、ということですが、とにかくここにある:

  • あなたは、クラス、演算子を含むすべての識別子を、見たい場合は、 ghciで現在定義されているコンストラクタとタイプは、空白にカーソルを置いたままタブを押すだけです。あなたはオペレータ*の優先順位と結合を知りたい場合は、あなたが見たい場合は

  • だけで何のクラスMことがちょうど

    :i M 
    
  • の場合を使用するインスタンスである

    :i * 
    
  • を使用あなたは関数の署名を見たいと思うfちょうど使用

    :i f 
    

    :set -fbreak-on-exceptionを書き込むと、ghciが破損し、例外がスローされたときに失敗し、例外の際に上記のコマンドをすべて使用できます。