Hi Kyle, thank you again for your help and analysis. In summary, org-mode needs no patches, but inf-haskell's comint-prompt-regexp needs updates. I'll follow up with the inf-haskell maintainers. ---- > inf-haskell used to set comint-prompt-regexp in the body of > inferior-haskell-mode... This is inf-haskell's variable. > ob-haskell shouldn't set it. Thank you for your help in all this. I couldn't find where the regex was set in the org-mode source because it wasn't coming from org-mode at all. Putting this all together suggests that the correct fix is to update the inf-haskell regex to handle "Prelude| " correctly in the first place. I believe it's possible to compress the current inf-haskell regexp from this: (setq-local comint-prompt-regexp ;; Why the backslash in [\\._[:alnum:]]? "^\\*?[[:upper:]][\\._[:alnum:]]*\\(?: \\*?[[:upper:]][\\._[:alnum:]]*\\)*\\( λ\\)?> \\|^λ?> $") Down into this, without any significant loss of fidelity. We really don't care about any characters at the start of the line before the final "> ". (setq-local comint-prompt-regexp "^[[:alnum:].*_() |λ]*> ") This seems useful because, as I discovered this morning, importing modules mangles the prompt further: Prelude> import Data.Time Prelude Data.Time> :m + Data.Time.Clock Prelude Data.Time Data.Time.Clock> The testing data that this configuration correctly parsed is attached for reference. I'll figure out where to submit that patch to, and send it off. It's a single line change that shouldn't require any assignment papers. Thanks again, Nick