Buscar..


Observaciones

GHCI es el REPL interactivo que viene incluido con GHC.

Iniciando GHCi

Escriba ghci en un intérprete de comandos de shell para iniciar GHCI.

$ ghci
GHCi, version 8.0.1: http://www.haskell.org/ghc/  :? for help
Prelude> 

Cambiar el indicador predeterminado de GHCi

De forma predeterminada, el indicador de GHCI muestra todos los módulos que ha cargado en su sesión interactiva. Si tienes muchos módulos cargados esto puede alargarse:

Prelude Data.List Control.Monad> -- etc

El comando :set prompt cambia el prompt para esta sesión interactiva.

Prelude Data.List Control.Monad> :set prompt "foo> "
foo> 

Para cambiar la solicitud de forma permanente, agregue :set prompt "foo> " al archivo de configuración de GHCi .

El archivo de configuración de GHCi.

GHCi usa un archivo de configuración en ~/.ghci . Un archivo de configuración consta de una secuencia de comandos que GHCi ejecutará en el inicio.

$ echo ":set prompt \"foo> \"" > ~/.ghci
$ ghci
GHCi, version 8.0.1: http://www.haskell.org/ghc/  :? for help
Loaded GHCi configuration from ~/.ghci
foo> 

Cargando un archivo

El :l o :load comando de :load comprueba y carga un archivo.

$ echo "f = putStrLn \"example\"" > example.hs
$ ghci
GHCi, version 8.0.1: http://www.haskell.org/ghc/  :? for help
ghci> :l example.hs
[1 of 1] Compiling Main               ( example.hs, interpreted )
Ok, modules loaded: Main.
ghci> f
example

Dejar de fumar GHCi

Puede abandonar GHCi simplemente con :q o :quit

ghci> :q
Leaving GHCi.

ghci> :quit
Leaving GHCi.

Alternativamente, el acceso directo CTRL + D ( Cmd + D para OSX) tiene el mismo efecto que :q .

Recargando un archivo ya cargado

Si ha cargado un archivo en GHCi (por ejemplo, utilizando :l filename.hs ) y ha cambiado el archivo en un editor fuera de GHCi, debe volver a cargar el archivo con :r o :reload para hacer uso de los cambios, por lo tanto no es necesario escribir de nuevo el nombre del archivo.

ghci> :r
OK, modules loaded: Main.

ghci> :reload
OK, modules loaded: Main.

Puntos de ruptura con GHCi

GHCi admite puntos de interrupción de estilo imperativo fuera de la caja con código interpretado (código que se ha :loaded ).

Con el siguiente programa:

-- mySum.hs
doSum n = do
  putStrLn ("Counting to " ++ (show n))
  let v = sum [1..n]
  putStrLn ("sum to " ++ (show n) ++ " = " ++ (show v))

cargado en GHCi:

Prelude> :load mySum.hs 
[1 of 1] Compiling Main             ( mySum.hs, interpreted )
Ok, modules loaded: Main.
*Main> 

Ahora podemos establecer puntos de interrupción utilizando números de línea:

*Main> :break 2
Breakpoint 0 activated at mySum.hs:2:3-39

y GHCi se detendrá en la línea correspondiente cuando ejecutemos la función:

*Main> doSum 12
Stopped at mySum.hs:2:3-39
_result :: IO () = _
n :: Integer = 12
[mySum.hs:2:3-39] *Main> 

Puede ser confuso dónde estamos en el programa, por lo que podemos usar :list para aclarar:

[mySum.hs:2:3-39] *Main> :list
1  doSum n = do
2    putStrLn ("Counting to " ++ (show n))   -- GHCi will emphasise this line, as that's where we've stopped
3    let v = sum [1..n]

Podemos imprimir variables, y continuar la ejecución también:

[mySum.hs:2:3-39] *Main> n
12
:continue 
Counting to 12
sum to 12 = 78
*Main> 

Declaraciones multilínea

La instrucción :{ inicia el modo multilínea y :} finaliza. En el modo multilínea, GHCi interpretará las nuevas líneas como puntos y coma, no como el final de una instrucción.

ghci> :{
ghci| myFoldr f z [] = z
ghci| myFoldr f z (y:ys) = f y (myFoldr f z ys)
ghci| :}
ghci> :t myFoldr
myFoldr :: (a -> b -> b) -> b -> [a] -> b


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow