 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Process communication
 
+(defun intero-call-process (program &optional infile destination display &rest args)
+  "Synchronously call a process. Same interface as call-process/process-file."
+  (let ((process-args (append (list program infile destination display) args)))
+    (apply 'process-file process-args)))
+
 (defun intero-delete-worker (worker)
   "Delete the given WORKER."
   (when (intero-buffer-p worker)

                      (when intero-debug
                        (message "Intero arguments: %s" (combine-and-quote-strings arguments)))
                      (message "Booting up intero ...")
                      (apply #'start-process "stack" buffer "stack"
                             arguments))))
      (set-process-query-on-exit-flag process nil)
      (process-send-string process ":set -fobject-code\n")

(defun intero-get-buffer-create (worker)
  "Get or create the stack buffer for WORKER.
Uses the directory of the current buffer for context."
  (let* ((root (intero-extend-path-by-buffer-host (intero-project-root)))
         (cabal-file (intero-cabal-find-file))
         (package-name (if cabal-file
                           (intero-package-name cabal-file)
