kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 Nawaz
Nawaz
Вопрос

Как посмотреть текущий рабочий каталог в WinGHCi

Я'начал учить себя Haskell, и для этого я'установил The Haskell Platform для Windows. На данный момент я использую WinGHCi. Я узнал, что в ней есть команда :cd, которая используется для смены каталога. Но вопрос в том, как мне узнать, в какой директории я сейчас нахожусь? Не зная этого, зачем мне менять каталог. Я много искал, но так и не смог найти ответ.

Пожалуйста, подскажите, есть ли способ узнать текущий рабочий каталог. Предпочтительно я хотел бы настроить командную строку так, чтобы она показывала текущий каталог, почти как консоль Linux.


Следуя предложению @Daniel', я сделал следующее:

  • Так как я работал на Windows 7, там нет файла .ghci (я думаю, что это для Unix-подобных ОС), поэтому я создал файл ghci.conf в папке C:\Users\Apelles\AppData\Roaming\ghc, как указано здесь.
  • Скопировал скрипт из ответа Daniel'a в ghci.conf.
  • Затем я запустил ghci.exe, который представляет собой консольное окно. Я заметил, что он загрузил несколько больше модулей, чем обычно загружал до этого. Вот снимок:

введите описание изображения здесь

Как вы можете видеть, он загружает больше модулей, и последняя строка говорит,

Can't parse prompt string. Используйте синтаксис Haskell.

Что это значит? Какая строка вызывает проблему (из следующего сценария)?

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

Также, если я переименую файл ghci.conf в произвольное имя, а затем запущу ghci.exe, он загрузит эти модули: введите описание изображения здесь

Как я уже говорил, он загружает меньшее количество модулей, что означает, что с ghci.conf, ghci.exe делает что-то успешно, но в какой-то момент терпит неудачу. Как это исправить?

30 2012-06-28T17:53:10+00:00 4
 Nawaz
Nawaz
Редактировал вопрос 30-го июня 2012 в 4:04
Программирование
haskell
ghci
working-directory
winghci
 jp093121
jp093121
27-го февраля 2014 в 4:50
2014-02-27T16:50:15+00:00
Дополнительно
Источник
Редактировать
#16557441

System.Directory.getCurrentDirectory

Mr. Alien
Mr. Alien
Редактировал ответ 27-го февраля 2014 в 5:20
29
0
Бојан Матовски
Бојан Матовски
30-го мая 2018 в 4:26
2018-05-30T16:26:00+00:00
Дополнительно
Источник
Редактировать
#16557442

Я не уверен, что это "правильный" способ сделать это, но поскольку :! позволяет команды оболочки, вы также можете получить его с соответствующей командой оболочки (вашей ОС) для чтения каталога или содержимого (так cd, ls и тому подобное). Например, вы можете написать:

:! cd

Это зависит от того, для чего вам нужен каталог. Если вы просто хотите вывести его в консоль, то это может помочь.

Всего наилучшего!

5
0
Daniel Fischer
Daniel Fischer
29-го июня 2012 в 1:55
2012-06-29T13:55:37+00:00
Дополнительно
Источник
Редактировать
#16557440

Бедным решением для установки подсказки ghci в текущую рабочую директорию было бы размещение

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

в файле .ghci.

В первой строке мы определяем cur :: String -> IO String, которая получает текущий каталог и возвращает команду ghci для установки подсказки соответствующим образом. Затем мы определяем ghci-команду doprompt, которая выполняет это действие, а также команду для смены каталога и установки подсказки. Последняя строка выполняет :doprompt при запуске.

К сожалению, это не заставляет команду :cd dir отражать смену каталога, поэтому после этого придется вручную выполнить :doprompt или использовать :mycd для смены каталога.

Чтобы избежать слишком длинных запросов, можно манипулировать результатом getCurrentDirectory, отбрасывая начальную часть пути к файлу.

Другим недостатком этого простого подхода является то, что подсказка больше не содержит информации о загруженных модулях. Я полагаю, что все это можно преодолеть, но у меня нет достаточной мотивации, чтобы копать сейчас.

3
0
Srijan Chaudhary
Srijan Chaudhary
14-го марта 2019 в 10:45
2019-03-14T10:45:43+00:00
Дополнительно
Источник
Редактировать
#16557443

В командной строке Тип г :! компакт-диск, это даст вам выход для текущего каталога. В общем, использовать:! ` следуют команды оболочки для запуска командной оболочки в командной строке ГГц. Снаряды по-разному на Windows и Mac/Linux, поэтому команды будут разные.

 Ryan
Ryan
Редактировал ответ 11-го августа 2019 в 1:41
1
0
Похожие сообщества 3
Haskell
Haskell
1 672 пользователей
https://combot.org/chat/-1001043143583 Ссылки на полезные ресурсы: https://ruhaskell.org/links.html ; Информация о мероприятиях: https://gist.github.com/qnikst/a96cac661be80d126d0829f2ced1916e
Открыть telegram
Haskell Start
Haskell Start
895 пользователей
Чат для вопросов по основам хаскеля для совсем начинающих. Правила чата: http://bit.ly/λrules Остальные чаты перечислены тут: https://ruhaskell.org/links Wiki сообщества: http://bit.ly/λwiki (про редакторы там тоже написано)
Открыть telegram
Haskell CVs and Jobs
Haskell CVs and Jobs
540 пользователей
RuHaskell.org Discuss Haskell employers, vacancies and job market. Show your CV! Job postings are in @haskell_job General discussion in @haskellru, @haskell_learn, @haskell_en Offtop: @haskell_cv_blah Code of Conduct: http://bit.ly/λrules
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 6 дней назад
2
Денис Васьков
Зарегистрирован 1 неделю назад
3
Dima Patrushev
Зарегистрирован 1 неделю назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией