plataforma para pagina oficial descargar compilador haskell ghci working-directory winghci

para - haskell website



Cómo ver el directorio de trabajo actual en WinGHCi (3)

La solución de un hombre pobre para establecer el indicador ghci en el directorio de trabajo actual sería poner

let cur fill = do { cwd <- System.Directory.getCurrentDirectory; return (":set prompt /"" ++ cwd ++ fill ++ " /""); } :def doprompt (/_ -> cur ">") :def mycd (/dir -> System.Directory.setCurrentDirectory dir >> cur ">") :doprompt

en el archivo .ghci .

En la primera línea, definimos cur :: String -> IO String que obtiene el directorio actual y devuelve el comando ghci para configurar el indicador de forma correspondiente. Luego definimos un doprompt comando doprompt que realiza esa acción y un comando para cambiar el directorio y establecer el indicador. La última línea se ejecuta :doprompt en el inicio.

Desafortunadamente, eso no hace que :cd dir refleje el cambio de directorio, uno tendría que hacer un manual :doprompt luego, o usar :mycd para cambiar el directorio.

Para evitar getCurrentDirectory demasiado largas, uno podría manipular el resultado de getCurrentDirectory al getCurrentDirectory una parte inicial de la ruta del archivo.

Otro inconveniente de este enfoque simple es que la solicitud ya no contiene información sobre los módulos cargados. Creo que todo eso podría superarse, pero no estoy lo suficientemente motivado para hacer la excavación ahora.

Empecé a enseñarme a mí mismo Haskell, y para eso instalé la plataforma Haskell para Windows. Estoy usando WinGHCi partir de ahora. Aprendí que tiene comando :cd que se usa para cambiar el directorio. Pero la pregunta es, ¿cómo sabría en qué directorio estoy actualmente? Sin saber eso primero por qué querría cambiar de directorio. Busqué mucho pero no pude encontrar la respuesta.

Por favor, dígame si hay una manera de saber el directorio de trabajo actual. Preferiblemente, me gustaría configurar el indicador de comando para que muestre el directorio actual, muy parecido a la consola de Linux.

Siguiendo la sugerencia de @Daniel, hice estas:

  • Como trabajé en Windows 7, no hay ningún archivo .ghci (creo que es para el sistema operativo tipo Unix), por lo que creé un archivo ghci.conf en la ghci.conf C:/Users/Apelles/AppData/Roaming/ghc , ya que Se instruye aquí .
  • Copie pegado el guión de la respuesta de Daniel a ghci.conf .
  • Entonces inicié ghci.exe que es la ventana tipo consola. Noté que cargaba pocos módulos más de los que solía cargar antes. Aquí está la instantánea:

Como puedes ver, carga más módulos, y la última línea dice:

No se puede analizar la cadena de mensajes. Utilice la sintaxis de Haskell.

Qué significa eso? ¿Qué línea está causando problema (de la siguiente secuencia de comandos)?

let cur fill = do { cwd <- System.Directory.getCurrentDirectory; return (":set prompt /"" ++ cwd ++ fill ++ " /""); } :def doprompt (/_ -> cur ">") :def mycd (/dir -> System.Directory.setCurrentDirectory dir >> cur ">") :doprompt

Además, si renombro el archivo ghci.conf a un nombre aleatorio y luego inicio ghci.exe , se cargan estos módulos:

Como dije antes, carga menos cantidad de módulos, lo que significa que con ghci.conf , ghci.exe hace algo con éxito, pero falla en algún momento. ¿Cómo arreglar eso?


No estoy seguro de si esta es la forma "correcta" de hacerlo, pero ya que :! permite comandos de shell, también puede obtenerlo con el comando de shell apropiado (de su sistema operativo) para leer el directorio o el contenido ( cd , ls y me gusta). Por ejemplo, puedes escribir:

:! cd

Depende para qué necesitas el directorio. Si solo quiere imprimirlo en su consola, esto puede ayudar.

¡Todo lo mejor!


System.Directory.getCurrentDirectory