2011-11-09 9 views
6

C'è un modo in GHCi di ottenere fondamentalmente una discarica di stato? Con questo intendo un elenco di:discarica ambiente GHCi

  • Tutti gli operatori caricati con la sua precedenza, associatività e firma.
  • Tutte le classi caricate.
  • Tutti i dati, tipo e newtype caricati insieme a quali classi sono istanze di.
  • Tutte le funzioni caricate con la sua firma e la classe a cui appartengono se lo fanno.

Supponendo che ciò sia possibile, è anche possibile farlo in fase di esecuzione, ad esempio durante un'eccezione?

risposta

4

:browse vi darà la maggior parte di queste informazioni. Mostra

  • Tipo firme per funzioni e operatori.
  • Classi e relativi metodi.
  • Tipi di dati, newtypes e sinonimi di tipo, con i costruttori se sono nell'ambito.

Senza argomenti, mostra queste informazioni per il modulo attualmente caricato. Puoi anche specificare un modulo diverso.

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

Per vedere più in dettaglio, tra cui priorità e l'associatività degli operatori, nonché le istanze di un tipo di dati, utilizzare :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 

Questi comandi sono disponibili anche durante il debug.

Per ulteriori informazioni, digitare :help o vedere the GHCi chapter of the GHC user's guide.

+0

Voglio qualcosa come questo per l'intero sistema non solo un modulo. –

+2

@VansonSamuel: Esiste il modulo ': browse * Module', che mostra le informazioni relative a qualsiasi cosa nell'ambito di quel modulo, cioè tutte le sue importazioni e le sue esportazioni. Forse è più vicino a ciò di cui hai bisogno? – hammar

+0

Ci proverò. Grazie a @hammar questa è la quarta domanda a cui mi hai aiutato. :-) –

1

Ci sono modi per ottenere queste informazioni. Il problema è che, per quanto ne so, non c'è modo di filtrare esattamente nel modo desiderato, ma comunque eccolo:

  • Se volete vedere tutti gli identificatori, tra classi, gli operatori, Costruttori e tipi, attualmente definiti in ghci, basta premere il tasto Tab mentre si ha il cursore sugli spazi bianchi.

  • Se volete sapere la priorità e l'associatività di un operatore * basta usare

    :i * 
    
  • Se volete vedere quali classi M è istanza di basta usare

    :i M 
    
  • Se vuoi vedere la firma di una funzione f usa solo

    :i f 
    

    Se si scrive :set -fbreak-on-exception allora ghci si interromperà piuttosto che fallire quando viene generata un'eccezione e quindi è possibile utilizzare tutti i comandi sopra indicati durante un'eccezione.