2011-12-04 23 views
8

Soy nuevo en Haskell y me pregunto si hay una forma de generar líneas de 'depuración' dentro de una función en Haskell. ES DECIR. Quiero depurar qué valores están siendo introducidos en una funciónHaskell Print Lines en la función

Mi código actual es

import Prelude 

foo(a,b,c) 
    print("input a : " ++ a) 
    = a + b + c 

main = print(foo(1, 2, 3)) 

Tengo experiencia con la programación, pero esta es mi primera vez de acercarse a la programación funcional, por lo que se observará ninguna ayuda .

Respuesta

16

Está buscando Debug.Trace.trace.

import Debug.Trace 
foo a b c = trace ("input a: " ++ show a) (a + b + c) 
main = print (foo 1 2 3) 

trace es una función que imprime su primer argumento, antes de regresar a su segundo. Sin embargo, no es referencialmente transparente, por lo que solo debe usarse para la depuración.

Además, tenga en cuenta que los paréntesis no se utilizan para la aplicación de funciones en Haskell, solo para la agrupación.

+0

gracias mucho! Me voy a google lo que hace 'show' ahora – AlanFoster

+0

@ user551841, 'show' produce una representación de cadena de un valor (para imprimir y tal). –

+12

@ user551841: Do not Google, [Hoogle] (http://www.haskell.org/hoogle/?hoogle=show)! Es un motor de búsqueda especializado para la documentación de Haskell, y tiene la característica bastante única de poder buscar funciones _por tipo_. Si te estás metiendo en Haskell, es mejor que te familiarices con él. – hammar

7

Además de la sugerencia de @ hammar de trace, podría utilizar traceShow (también de Debug.Trace, y simplemente definido)

import Debug.Trace (traceShow) 
foo a b c = traceShow (a, b, c) (a + b + c) 
main = print (foo 1 2 3)