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.

Другие вопросы по тегам