Bruno Barbier <brubar...@gmail.com> writes: > About :results output vs :results value, I decided to use the "it" > variable, i.e. to ask GHCi what was the last value (see [1]). > > About sessions, I decided to rename the buffer as you suggested. That's > a partial workaround that should work well enough, until haskell-mode > provides a way to choose the buffer name. > > I've updated the tests and the expected results.
Thanks! I will provide comments inline. > Note that I've changed the tests about errors; I'm now expecting > ob-haskell to raise errors. I'm not sure what we should expect to be > consistent with other org babel backends. Errors are usually displayed separately, using `org-babel-eval-error-notify'. > +;; To increase the chances of failure when running tests, you can use this > command line: > +;; > +;; (for I in 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 > 7 8 9 10; do make 'BTEST_OB_LANGUAGES=haskell' BTEST_RE='haskell' test-dirty > & done) 2>&1 | grep FAILED > +;; > + > +;;;; Status > +;; > +;; All the tests should succeed (except for random failures); those > +;; flagged with ":expected-result :failed" are known > +;; limitations/bugs. Tested with (2023-03-18): > +;; > +;; | emacs-version | 29.0.60 | > +;; | org-version | main@4cad6c8ea (Mar 16 2023) | > +;; | haskell-mode | master@20d4e23 (Mar 4 2023) | > +;; | ghci | 9.0.2 | You can probably remove this. > + (`value (org-babel-comint-with-output > + (session org-babel-haskell-eoe nil full-body) > + (insert "__LAST_VALUE_IMPROBABLE_NAME__=()::()\n") > + (comint-send-input nil t) > + (insert full-body) > + (comint-send-input nil t) > + (insert "__LAST_VALUE_IMPROBABLE_NAME__=it\n") > + (comint-send-input nil t) > + (insert (concat "putStrLn (\"\\\"\" ++ " > org-babel-haskell-eoe " ++ \"\\\"\")\n")) Why not simply putStrLn ("\"" ++ show it ++ "\"") ? > + (when (and session-name (string= session-name "none")) > + (setq session-name nil)) > + (unless session-name > + ;; As haskell-mode is using the buffer name "*haskell*", we stay > + ;; away from it. > + (setq session-name (generate-new-buffer-name "*ob-haskell*"))) This will make ob-haskell spawn a separate ghci process buffer every single time a user runs non-session src block. And the buffer is not closed after getting the result. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92>