2012-10-18 2 views
7

Mi chiedo se è possibile mantenere i valori assegnati in ghci quando un modulo viene ricaricato?ghci: mantenere i valori definiti nell'ambito dopo il modulo ricarica

Ad esempio assegno un valore in ghci:

ghci> let x = 1 

o

ghci> x <- getLine 

Dopo aver inserito :r per ricaricare un modulo esistente x non è nell'ambito più. È generalmente possibile mantenere il compito disponibile, come ad esempio nell'interprete Python? (questo è veramente conveniente ...)

Anche se in realtà ogni riga in ghci rappresenta una funzione che è (monadicamente) associata a alla successiva, mi chiedo ancora se mantenere tale stato è possibile.

risposta

4

Non sono a conoscenza di alcun modo per farlo.

Il problema è che potresti avere una variabile legata a un valore di un certo tipo, modificare l'origine per rimuovere quel tipo e premere ricarica. Ora hai una variabile di un tipo che non esiste più.

Ancora, si potrebbe pensare che non dovrebbe essere troppo difficile rilevarlo e scartare solo le variabili che non hanno più senso. (La parte davvero divertente è presumibilmente quando un tipo esiste ancora ma ha un diverso numero di campi ora, o qualcosa del genere ...)

+1

Non penso che ghci possa farlo, ma è perfettamente possibile creare un Haskell che mantiene gli attacchi. Inoltre, non c'è davvero bisogno di un: comando di ricarica. – augustss

+0

Hum che dipende da come la variabile è associata a uno spazio dei nomi. Recentemente ho iniziato a usare l'interprete interattivo python e ho trovato questa funzione abbastanza comoda. Se si associa una variabile 'x = 3' consente di dire nel modulo' test', allora questa variabile è in ambito tramite 'test.x'. Se si cancella 'x' in' test' e si ricarica il modulo 'test.x' è scomparso mentre per esempio una variabile precedentemente definita' x' al livello superiore è ancora in ambito. – JHannes