Po uruchomieniu akcji IO
w GHCi automatycznie uruchamia akcję i pokazuje wynik, jest to miłe, ale nie dla studentów próbujących zrozumieć różnicę między IO
i non-IO
. Czy istnieje sposób na zmianę konfiguracji GHCi tak, aby uruchamiał akcję, ale zamiast tego pokazuje coś takiego jak <<IO Int action>>
? Coś bardziej jak wynik dla działań ST (ale działania powinny być wykonywane):Wyłącz drukowanie wyników IO w GHCi?
teraz robi:
> return 1 :: IO Int
1
> return 1 :: ST s Int
<<ST action>>
chciałbym:
> return 1 :: IO Int
<<IO Int action>>
> putStrLn "bla"
bla
<<IO() action>>
Edit:
- Po prostu stwierdziłem, że
IO
jest prawdopodobnie jedyną rzeczą obsługiwaną specjalnie przez GHCi,ST
faktycznie ma instancję dlaShow (ST s a)
, która zwraca"<<ST action>>"
. Więc może gdybym mógł wyłączyć to specjalne traktowanieIO
, byłoby to wystarczające. - Co do dozwolonych zmian kodu: ręczne zmienianie wyrażonego wyrażenia nie jest opcją. Mogła to być zmiana w bibliotekach, ale wolałbym tego nie robić (rozważałem stworzenie typu owiniętego
IO
, ale interpreter nie uruchomi tej akcji). Gdyby GHCi mógł jakoś automatycznie owijać akcjeIO
, byłaby to opcja.
Czy zmiany kodu są dopuszczalne? Możesz zawrzeć wartość IO, którą masz, z inną, która najpierw wykonuje wartość, a następnie drukuje coś, co lubisz. – usr
usr: Nie z wyrażenia, które należy poddać ocenie, zobacz moje zmiany w pytaniu. –