From: Immanuel Litzroth <immanuel.litzroth@gmail.com>
To: Lawrence Bottorff <borgauf@gmail.com>
Cc: emacs-orgmode Mailinglist <emacs-orgmode@gnu.org>
Subject: Re: Unhealthy Haskell babel
Date: Thu, 10 Dec 2020 19:40:02 +0100 [thread overview]
Message-ID: <CAM1nAcyApvQ-rXhAfULZQKk1Ro_GwDzgsfWDjAW4bX=ZGg9S3g@mail.gmail.com> (raw)
In-Reply-To: <CAFAhFSUmQvj4xoPzb4Tidy50ubAK-vna2rZ7DuaGttLdmOpPYQ@mail.gmail.com>
Well another possible solution is to wrap the code blocks in
:{
xxx
:}
in
(defun org-babel-execute:haskell (body params) -- ob-haskell.el
Immanuel
On Thu, Dec 10, 2020 at 6:21 PM Lawrence Bottorff <borgauf@gmail.com> wrote:
>
> I see your point, i.e., compiled, multi-file projects are not really meant for the REPL-dominant world of org-mode babel. Babel's sweet-spot would be the interpreted world, the very best probably a Lisp language. Still, the ability to add code to a running REPL should be possible. As I mentioned, SML is a sibling of Haskell and its babel implementation worked fine for me as I worked through an SML course. So yes, this appears to be a Haskell REPL issue. I'm just a beginner with Haskell, and all my intro texts start you out using the ghci REPL interactively. But then they switch you over to a text file compiled in the REPL with :l myfile.hs . . . no explanation as to why you can't just continue with the REPL putting the program in line-by-line. The fact that I can use the :set +m to include multiple lines of code, but cannot do a type definition is rather bizarre, though. This is a decision Haskell made with their REPL and babel really can't do much about it, I suppose. The Haskell .lhs literate option is interesting. Yes, I'd like to see your tangle option, please.
>
> On Thu, Dec 10, 2020 at 4:28 AM Immanuel Litzroth <immanuel.litzroth@gmail.com> wrote:
>>
>> I don't think org-babel is a good fit for compiled languages. If the
>> idea is to just take 1 snippet,
>> and "execute" that it means that to have a consistent whole you'd need
>> to put all the modules of
>> your program into that snippet (already impossible in Haskell, you can
>> have only 1 module per file),
>> compile that, run the resulting binary. Or org mode would have to have
>> some idea of what needs to
>> be retangled & rebuilt.
>> I think that using org-babel for compiled, multifile languages will
>> only work in very simple cases -- and
>> even then.. -- but will lead to problems very soon.
>> Immanuel
>>
>> On Thu, Dec 10, 2020 at 4:21 AM Lawrence Bottorff <borgauf@gmail.com> wrote:
>> >
>> > I'm looking into Haskell (latest ghci) again on org-mode. This
>> >
>> > #+begin_src haskell :results verbatim :exports both
>> > :set +m
>> > doubleSmallNumber x = if x > 100
>> > then x
>> > else x*2
>> > #+end_src
>> >
>> > works, but still the :set +m is necessary for it to see the whole. But this
>> >
>> > #+begin_src haskell :results verbatim :exports both
>> > :set +m
>> > factorial :: Int -> Int
>> > factorial 0 = 1
>> > factorial n = n * factorial (n - 1)
>> > #+end_src
>> >
>> > results in this on the REPL side:
>> >
>> > Prelude> :set +m
>> > factorial :: Int -> Int
>> > factorial 0 = 1
>> > factorial n = n * factorial (n - 1)
>> > "org-babel-haskell-eoe"
>> > Prelude>
>> > <interactive>:26:1-23: error:
>> > • No instance for (Show (Int -> Int)) arising from a use of ‘print’
>> > (maybe you haven't applied a function to enough arguments?)
>> > • In a stmt of an interactive GHCi command: print it
>> > Prelude> Prelude> Prelude> "org-babel-haskell-eoe"
>> >
>> > which is the same behavior if I try to feed the program into the REPL one line at a time, i.e.,
>> >
>> > Prelude> factorial :: Int -> Int
>> >
>> > <interactive>:40:1-23: error:
>> > • No instance for (Show (Int -> Int)) arising from a use of ‘print’
>> > (maybe you haven't applied a function to enough arguments?)
>> > • In a stmt of an interactive GHCi command: print it
>> >
>> > So the :set +m trick (take multiple lines) doesn't help here. Obviously, Haskell is not ready to be used with Babel. Can it be fixed? BTW, this does work with the regular ghci REPL and haskell-mode. If it helps, Standard ML, which has very similar syntax (it was Haskell's parent), works fine.
>> >
>> > LB
>>
>>
>>
>> --
>> -- Researching the dual problem of finding the function that has a
>> given point as fixpoint.
--
-- Researching the dual problem of finding the function that has a
given point as fixpoint.
next prev parent reply other threads:[~2020-12-10 18:42 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-10 3:20 Unhealthy Haskell babel Lawrence Bottorff
2020-12-10 10:27 ` Immanuel Litzroth
2020-12-10 17:21 ` Lawrence Bottorff
2020-12-10 18:40 ` Immanuel Litzroth [this message]
2020-12-10 20:26 ` Lawrence Bottorff
2020-12-14 20:45 ` Bastien
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAM1nAcyApvQ-rXhAfULZQKk1Ro_GwDzgsfWDjAW4bX=ZGg9S3g@mail.gmail.com' \
--to=immanuel.litzroth@gmail.com \
--cc=borgauf@gmail.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).