Когда вы остановились на точке останова в GHCi, вы можете получить доступ ко всему, что находится в области видимости. Допустим, у вас есть такая функция:
foo :: Int -> Int
foo x = g (x + 2)
where g y = x^y
Вы можете установить точку останова на foo
и попытаться вызвать ее:
> :break foo
Breakpoint 1 activated at /tmp/Foo.hs:(2,1)-(3,17)
> foo 42
Stopped at /tmp/Foo.hs:(2,1)-(3,17)
_result :: Int = _
g
пока еще не находится в области видимости, поэтому мы должны сделать один шаг:
[/tmp/Foo.hs:(2,1)-(3,17)] > :step
Stopped at /tmp/Foo.hs:2:9-17
_result :: Int = _
g :: Integral b => b -> Int = _
x :: Int = 42
Теперь, когда g
находится в области видимости, мы можем использовать его как любую функцию верхнего уровня:
[/tmp/Foo.hs:2:9-17] > g 2
1764
[/tmp/Foo.hs:2:9-17] > g 3
74088