Как правильно перезагрузить и запустить :main как одну команду в GHCi?

Есть ли способ связать :reload/:r вместе с :main как единую команду в GHCi?

Цель здесь состоит в том, чтобы не набирать оба каждый раз, когда я что-то меняю в другом терминале, а просто нажимать Enter.


person Jakub Arnold    schedule 05.06.2014    source источник


Ответы (1)


:cmd, кажется, принимает строку с несколькими строками. Поэтому вы можете выполнить следующую команду.

:cmd return $ unlines [":reload",":main"]

также вы можете добавить следующий код в ~/.ghci

:def hoge const $ return $ unlines [":reload",":main"]

теперь вы можете выполнить :hoge в ghci

person ymonad    schedule 05.06.2014
comment
hoge? Вы имеете в виду doge? - person luqui; 05.06.2014
comment
hoge — это одна из метасинтаксических переменных (en.wikipedia.org/wiki/Metasyntactic_variable), которая часто используется в японском языке. - person ymonad; 05.06.2014
comment
Вы можете расширить это до :cmd return $ unlines ["kt",":reload","kt <- forkAndKill"], где forkAndKill разветвляет какое-то действие, а затем возвращает действие уничтожения потока. Это полезно для перезапуска сервера одной командой. - person Steven Armstrong; 22.12.2018
comment
@ymonad для :def примера Я получаю Variable not in scope ошибок для символов: const, return, $, unlines. Как их импортировать? - person Răzvan Flavius Panda; 14.04.2020
comment
@RăzvanFlaviusPanda Они находятся в модуле Prelude, который обычно загружается по умолчанию. Может быть, вы можете попробовать import Prelude или :module +Prelude до :def - person ymonad; 14.04.2020