Haskell / Intero - отправлять строки в буфер Intero REPL
Я пытался использовать Haskell для запуска простого производственного процесса. Как и многие производственные процессы, это включает в себя изменение положения вещей повсюду. По этой причине было бы очень удобно иметь файл сценария, в котором я мог бы отслеживать вещи и выборочно запускать команды в интерактивном Haskell, что-то вроде
-- to start the process
process <- startProcess
-- to stop process
stopProcess
-- to check how things are going
summary <- checkStuff
summary
-- optionally restart bad processes
restartProcesses (getBadProcesses summary)
-- send summary emails
sendSummaryEmails summary ["abunch@ofemails.com", "thatIwould@rather.com",
"nothaveto@keep.com" "typing@out.com",
"orcopy@pasting.com"]
-- set up something big that I don't want to have to retype/paste every time
studentGrades <- getStudentGrades "John Peterson"
gen <- getStdGen
let (randomTest, gen') = generateRandomTest studentGrades gen
compilePdf randomTest
answers <- getAnswers
gradeTest randomTest answers "John Peterson"
Было бы здорово, если бы, как и в случае с ESS (Emacs говорит о статистике) в R, вы могли бы нажать кнопку, чтобы отправить эти строки процессу repl. Возможно отдельные кнопки для строки, абзаца, региона. Уже есть способ сделать это?
Например с ESS, C-Ret
отправляет строку, C-c C-c
отправляет абзац и C-c C-r
отправляет регион.
1 ответ
Эта функция lisp в emacs отправит команду в репозиторий haskell
(defun haskell-send-command (cmd)
(process-send-string (inferior-haskell-process) (concat cmd "\n")))
и это вызовет предыдущий с текущим выбором
(defun haskell-send-selection ()
(interactive)
(haskell-send-command (x-selection)))
Вы можете назначить ему сочетание клавиш с global-set-key
, Затем вам нужно выяснить, как быстро выбрать то, что вы хотите отправить. Например M-h
это знак-абзац. Или просто перекодируйте функции ESS, которые вам нравятся:
(defun haskell-send-paragraph ()
(interactive)
(mark-paragraph)
(haskell-send-selection))
Я на самом деле использовал их для создания небольшого отладочного графического интерфейса для Haskell в emacs. У меня есть ярлыки для установки точек останова и пошагового выполнения, и положение отладчика выделяется непосредственно в коде haskell.