Мне не удалось найти какое-либо описание этой функции в GHCi, и тот факт, что она реализована с использованием обертки вокруг GHCi в пакете Atom IDE- Haskell -REPL , приводит меня к считаю, что это потому, что GHCi не может сделать это самостоятельно. GHCi также не позволяет другим процессам получать доступ к его истории во время сеанса, поскольку его история сохраняется только в файл (~/.ghc/ghci_history
на unix) в конце сеанса, поэтому сценарий сеанса GHCi хитрый (но см. ниже).
Я думаю, что самое близкое, что вы можете получить, это запустить GHCi с помощью скрипта-обёртки, используя expect
, чтобы он слушал спецификацию c последовательность нажатий клавиш, а затем отправьте вам ключи:: r enter up up enter:
#!/usr/bin/env expect
log_user 0
spawn ghci
log_user 1
while 1 {
interact "##" {send ":r\r\[A\[A\r"} #see note
exit
}
Таким образом, когда вы нажимаете ##
, GHCi будет перезагружаться и запускать / оценивать любую команду или выражение первый в истории. Это, по общему признанию, грубое решение, и оно может быть не самым безопасным, но я хотел, по крайней мере, предложить альтернативу.
Примечание : похоже, что управляющие символы в Приведенный выше блок кода отображается неправильно, поэтому вам может потребоваться получить их из источника разметки этого ответа или из выходных данных команды autoexpect .