6

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

  • ロードされたすべての演算子とその優先順位、結合性、および署名。
  • ロードされたすべてのクラス。
  • 読み込まれたすべてのデータ、型、および newtype と、それらがどのクラスのインスタンスであるか。
  • ロードされたすべての関数とその署名、および所属する場合は所属するクラス。

これが可能であると仮定すると、実行時、たとえば例外中にこれを行うことも可能ですか?

4

2 に答える 2

4

:browseこの情報のほとんどを提供します。それが示している

  • 関数と演算子の型アノテーション。
  • クラスとそのメソッド。
  • データ型、ニュータイプ、および型の同義語。スコープ内にある場合はコンストラクターを使用します。

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

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

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

詳細については、GHCユーザーガイドのGHCiの章を入力:helpまたは参照してください。

于 2011-11-09T17:34:18.220 に答える
1

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

  • クラス、演算子、コンストラクター、タイプなど、現在ghciで定義されているすべての識別子を表示する場合は、空白にカーソルを合わせてTabキーを押すだけです。

  • 演算子の優先順位と結合性を知りたい場合は、次を*使用してください。

    :i *
    
  • Mどのクラスがちょうど使用のインスタンスであるかを確認したい場合

    :i M
    
  • 関数のシグネチャを確認したい場合は、次をf使用してください。

    :i f
    

    書く:set -fbreak-on-exceptionと、例外がスローされたときにghciが失敗するのではなく壊れて、例外中に上記のすべてのコマンドを使用できるようになります。

于 2011-11-09T17:33:58.690 に答える