2012-10-18 13 views
7

Zastanawiam się, czy możliwe jest zachowanie przypisanych wartości w ghci po przeładowaniu modułu?ghci: zachowaj zdefiniowane wartości w zakresie po przeładowaniu modułu

Na przykład przypisać wartość w ghci:

ghci> let x = 1 

lub

ghci> x <- getLine 

Po wprowadzeniu :r aby odświeżyć istniejący moduł x nie jest już w zasięgu. Czy generalnie możliwe jest utrzymanie przydziału, jak na przykład w tłumaczu Pythona? (to jest naprawdę wygodne ...)

Nawet jeśli faktycznie każda linia w ghci reprezentuje funkcję, która jest (monadycznie) związana do następnej wciąż zastanawiam się, czy utrzymywanie tego stanu jest możliwe.

Odpowiedz

4

Nie jestem świadomy żadnego sposobu na zrobienie tego.

Problem polega na tym, że można mieć zmienną związaną z wartością określonego typu, edytować źródło w celu usunięcia tego typu i nacisnąć przeładowanie. Teraz masz zmienną typu, który już nie istnieje.

Nadal można by pomyśleć, że nie powinno to być zbyt trudne do wykrycia, i odrzucić tylko zmienne, które nie mają już sensu. (Naprawdę fajna część jest prawdopodobnie wtedy, gdy typ nadal istnieje, ale ma teraz inną liczbę pól, lub coś takiego ...)

+1

Nie sądzę, że ghci może to zrobić, ale jest całkiem możliwe, aby zrobić interaktywny Haskell, który zachowuje wiązania. Ponadto, nie ma potrzeby użycia polecenia: reload. – augustss

+0

Hum zależy od tego, jak zmienna jest związana z przestrzenią nazw. Niedawno zacząłem korzystać z interpretera interaktywnego Pythona i znalazłem tę funkcję całkiem wygodnie. Jeśli zwiążesz zmienną 'x = 3', powiedzmy w module' test', to ta zmienna jest w zasięgu poprzez 'test.x'. Jeśli usuniesz 'x' w' teście' i przeładujesz moduł 'test.x' zniknie, podczas gdy na przykład poprzednio zdefiniowana zmienna' x' na najwyższym poziomie jest nadal w zasięgu. – JHannes

Powiązane problemy