¿Cómo puedo ver la definición de una función en Haskell / GHCi?


Estoy usando Haskell 2010.1.0.0.1 con GHC 6. Escribir :t en el prompt GHCi seguido del nombre de una función nos muestra el tipo de la función. ¿Hay alguna manera de ver la definición de la función también?

Author: Smi, 2011-04-26

3 answers

Actualmente no.

El comando más cercano a lo que quieres es :info

: info name ...

Muestra información sobre el nombre(s). Por ejemplo, si name es una clase, se imprimirán los métodos de clase y sus tipos; si name es un constructor de tipos, se imprimirá su definición; si name es una función, se imprimirá su tipo. Si name se ha cargado desde un archivo fuente, GHCi también mostrará la ubicación de su definición en el fuente.

Para tipos y clases, GHCi también resume las instancias que los mencionan. Para evitar mostrar información irrelevante, una instancia se muestra solo si (a) su encabezado menciona el nombre, y (b) todas las demás cosas mencionadas en la instancia están en el ámbito (ya sea calificado o no) como resultado de los comandos :load o :module.

Así:

Prelude> :info ($)
($) :: (a -> b) -> a -> b   -- Defined in GHC.Base
infixr 0 $

Sin embargo, puede ver la fuente de los identificadores generados por la herramienta haddock, en Hackage.

  1. Busque el módulo en Hackage
  2. Haga clic en el enlace fuente

Tenga en cuenta que "?src " es un comando válido en lambdabot, en el canal IRC #haskell, y hace lo que esperarías.

> ?src ($)
> f $ x = f x
 34
Author: Don Stewart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-26 05:46:51

No, no puedo hacer eso. Algunas cosas divertidas que usted, el principiante de Haskell, puede hacer:

  • En los documentos HTML haddock, haga clic en "fuente"... estudia la fuente.
  • :browse para encontrar todas las definiciones exportadas por un módulo
  • Use :help para el resultado obvio
  • utilice la interfaz web de hoogle para buscar funciones, o instale hoogle localmente!
  • ?
  • Beneficio!
 5
Author: Thomas M. DuBuisson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-26 05:46:50

No lo creo. Puede usar :i para un poco más de información (más útil para operadores de infix y construcciones de datos, etc.), pero no la definición:

ghci> :i repeat
repeat :: a -> [a]       -- Defined in GHC.List

Puede usar hoogle para encontrar rápidamente la documentación de una función de biblioteca estándar, que a la derecha tiene un enlace para ir a la fuente. Todavía está a unos pocos clics de distancia.

 4
Author: luqui,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-26 05:45:30