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>
: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
: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