debugger debug debugging haskell compilation ghc haskell-platform

debugging - debugger - debug in haskell



Salidas del programa Haskell `<< loop>>` (1)

Como han dicho varios de los comentarios, este es el RTS de Haskell que detecta un bucle infinito en tiempo de ejecución. No siempre puede detectar dichos bucles , pero en casos simples puede hacerlo.

Por ejemplo,

x = x + 1

compilará muy bien, pero provocará una excepción en tiempo de ejecución. (Por cierto, esta es una excepción , en particular, puede atraparla si lo desea, pero es probable que no "quiera").

Entonces, ¿por qué GHC incluso deja esta compilación? Bueno, porque si reemplazo + con, digamos, : , entonces la expresión ahora termina bien. (Representa una lista circular de 1 elemento.) El compilador no puede decir en tiempo de compilación qué es y qué no es una recursión sensata. El RTS no siempre puede detectar en tiempo de ejecución; pero cuando puede decir que algo anda mal, te lo hará saber lanzándote una excepción.

Escribí un programa Haskell que preforma una búsqueda binaria en una lista. Al menos eso es lo que pensé que es. Cuando compilé el programa con ghc v7.6.3 y ejecuté el programa obtuve el siguiente resultado:

progname: <<loop>>

¿Qué diablos significa esta salida? ¿Significa que tenía un bucle infinito que optimizaba ghc ? ¿Cómo se supone que debo depurar esto?