tutorial swirl operador_binario lección funciones fun español diferencia cuadrada debugging haskell read-eval-print-loop ghci

debugging - swirl - ¿Cuál es la mejor manera de probar e interactuar con las funciones internas definidas dentro de una función de nivel superior?



operador_binario<- function(fun, a, b){ (1)

Cuando programo en Javascript, me parece extremadamente conveniente poder usar el depurador para detener la ejecución del programa en cualquier punto y poder ejecutar comandos e inspeccionar variables desde allí.

Ahora, de vuelta en Haskell, ¿hay alguna manera de ejecutar funciones arbitrarias en GHCI REPL interactivo o estoy limitado a cosas declaradas en el toplevel?

¿Cuál es el enfoque "estándar" para trabajar y depurar funciones y valores internos?


Cuando te detienen en un punto de interrupción en GHCi, puedes acceder a todo lo que esté dentro del alcance. Digamos que tienes una función como esta:

foo :: Int -> Int foo x = g (x + 2) where g y = x^y

Puede establecer un punto de interrupción en foo e intentar llamarlo:

> :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 aún no está en el alcance en este punto, así que tenemos que dar un paso una vez:

[/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

Ahora que g está dentro del alcance, podemos usarlo como cualquier función de nivel superior:

[/tmp/Foo.hs:2:9-17] > g 2 1764 [/tmp/Foo.hs:2:9-17] > g 3 74088