     (intero-with-dump-splices
      (let* ((output (intero-blocking-call
                      'backend
-                     (concat ":load " (intero-localize-path (intero-temp-file-name)))))
+                     (concat ":load " (intero-path-for-ghci (intero-temp-file-name)))))
             (msgs (intero-parse-errors-warnings-splices nil (current-buffer) output))
             (line (line-number-at-pos))
             (column (if (save-excursion

                      cont
                      'interrupted)
    (let* ((file-buffer (current-buffer))
           (staging-file (intero-localize-path (intero-staging-file-name)))
           (temp-file (intero-localize-path (intero-temp-file-name))))
      ;; We queue up to :move the staging file to the target temp
      ;; file, which also updates its modified time.
      (intero-async-call
       'backend
       (format ":move \"%s\" \"%s\""
               ;; TODO: This is a temporary fix. I don't want to use
               ;; %S as that may escape things that Haskell doesn't
               ;; consider escapable; Intero's function reads with
               ;; 'read' (not my implementation!). Instead, I should
               ;; implement an alternative reading function for Intero
               ;; which would consume only "strings" and treat any
               ;; non-double-quote characters as-is.
               (replace-regexp-in-string "\\\\" "\\\\\\\\" staging-file)
               (replace-regexp-in-string "\\\\" "\\\\\\\\" temp-file)))
      ;; We load up the target temp file, which has only been updated
      ;; by the copy above.
      (intero-async-call

   "\n$" ""
   (intero-blocking-call
    'backend
    (format ":loc-at %s %d %d %d %d %S"
            (intero-path-for-ghci (intero-temp-file-name))
            (save-excursion (goto-char beg)
                            (line-number-at-pos))
            (save-excursion (goto-char beg)
