¿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?
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.
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
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!
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.
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