2011-11-09 4 views
6

Y at-il moyen dans GHCi d'obtenir un vidage d'état? J'entends par là une liste de:GHCi environnement dump

  • Tous les opérateurs chargés avec sa priorité, son associativité et sa signature.
  • Toutes les classes chargées.
  • Toutes les données chargées, le type et le nouveau type ainsi que les classes dont ils sont des instances.
  • Toutes les fonctions chargées avec sa signature, et la classe à laquelle elles appartiennent si elles le font.

En supposant que cela soit possible, est-il également possible de le faire lors de l'exécution, par exemple lors d'une exception?

Répondre

4

:browse vous donnera la plupart de ces informations. Il montre

  • Signature de types pour les fonctions et les opérateurs.
  • Classes et leurs méthodes.
  • Types de données, nouveaux types et synonymes de type, avec constructeurs s'ils sont inclus dans la portée.

Sans aucun argument, il affiche cette information pour le module actuellement chargé. Vous pouvez également spécifier un module différent.

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 
... 

Pour voir plus de détails, y compris la priorité et l'associativité des opérateurs, ainsi que des cas pour un type de données, utilisez :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 

Ces commandes sont également disponibles lors du débogage.Pour plus d'informations, entrez :help ou the GHCi chapter of the GHC user's guide.

+0

Je veux quelque chose comme ça pour tout le système, pas seulement un module. –

+2

@VansonSamuel: Il y a la forme ': browse * Module', qui montrera des informations pour tout ce qui est dans la portée de ce module, c'est-à-dire toutes ses importations ainsi que ses exportations. Peut-être que c'est plus proche de ce dont vous avez besoin? – hammar

+0

Je vais essayer ça. Merci @hammar c'est comme la quatrième question que vous m'avez aidé. :-) –

1

Il existe des moyens d'obtenir cette information. Le problème est que, pour autant que je sache, il n'y a aucun moyen de filtrer exactement comme vous le voulez, mais de toute façon elle est ici:

  • Si vous voulez voir tous les identifiants, y compris les classes, les opérateurs, Les constructeurs, et les types, actuellement définis dans ghci appuyez simplement sur la touche tab pendant que vous avez le curseur sur les espaces.

  • Si vous voulez connaître la priorité et l'associativité d'un opérateur * il suffit d'utiliser

    :i * 
    
  • Si vous voulez voir ce que les classes M est par exemple de simplement utiliser

    :i M 
    
  • Si vous voulez voir la signature d'une fonction f il suffit d'utiliser

    :i f 
    

    Si vous écrivez :set -fbreak-on-exception alors ghci va casser plutôt que d'échouer lorsqu'une exception est levée et vous pouvez ensuite utiliser toutes les commandes ci-dessus pendant une exception.