emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Eric Schulte <schulte.eric@gmail.com>
To: Major A <andras.g.major@gmail.com>
Cc: emacs-orgmode@gnu.org
Subject: Re: Bug: Babel: haskell code evaluation inconsistency [7.7 (release_7.7.160.g3e33)]
Date: Sun, 21 Aug 2011 12:24:17 -0600	[thread overview]
Message-ID: <87aab2bp2m.fsf@gmail.com> (raw)
In-Reply-To: <20110819223851.GA3315@discus> (Major A.'s message of "Sat, 20 Aug 2011 00:38:52 +0200")

Major A <andras.g.major@gmail.com> writes:

> Hi again,
>
> I want to use haskell code blocks in order to evaluate them.  The
> problem is that, depending on what haskell interpreters are installed
> on the computer, Babel will call a different interpreter to evaluate
> the code with.  Also, the haskell interpreter interface appears to be
> highly stateful and unreliable.
>

Currently inf-haskell is used for all evaluation, so Babel inherits both
its functionality and its weaknesses.  It seems that it would be
worthwhile to add non-session evaluation to haskell, and possibly a way
to specify which engine (hugs or ghci) is used in interactive
evaluation, presumably inf-haskell exports some way to make this
specification.

I personally don't have time to make these changes right now, but I'd be
happy to provide guidance and answer questions to anyone who wanted to
try to submit a patch.  Also, there are a number of files which can
serve as examples of how to compile and execute code with Babel e.g.,
ob-java.el and ob-C.el.

>
> Here's an example -- ghc6 is installed, but not hugs:
>
> #+begin_src haskell :results output
>   import System.IO
>   openFile "doesNotExist.ppt" ReadMode
> #+end_src
>
> #+results:
> : Loading package ghc-prim ... linking ... done.
> : Loading package integer-gmp ... linking ... done.
> : Loading package base ... linking ... done.
>
> The interesting thing is that this output only occurs on the first run
> of the code -- if I hit C-cC-c again, the #+results: section will be
> empty.
>
> Now the same source, with hugs installed in addition to ghc6 -- the
> source block is the same, but the output is very different:
>
> #+results:
> : Type :? for help
> : ERROR - Syntax error in expression (unexpected keyword "import")
>
> Again, if I press C-cC-c again, the first line of output ("Type :? for
> help") is no longer present.
>
> This is what I suggest:
>
> - Do away with "haskell" as the keyword for haskell code blocks, just
>   like graphviz blocks use "dot" instead of simply "graphviz".
>
> - Introduce new keywords -- I propose at least "runghc", "ghci", and
>   "hugs".  This is important since there are significant source-level
>   differences (see above) between hugs and ghc and even between the
>   compiler and interpreter from the same project (ghc and ghci).
>   Without these, the progammer will never be able to predict how the
>   code is evaluated and which compiler or interpreter they must code
>   for.
>
> - Make sure the incorporation of the output or the value is done
>   correctly (also see my previous bug report for this).
>

I would prefer to keep haskell as the source block type if only so that
the blocks are fontified with haskell-mode.  However something like an
:engine or :compiler keyword could be used to specify ghc or hugs.  The
other suggested changes seem like good ideas.

Best -- Eric

>
> Enough for today,
>
>   András
>
>
>
> Emacs  : GNU Emacs 23.3.1 (i486-pc-linux-gnu, GTK+ Version 2.24.3)
>  of 2011-04-10 on raven, modified by Debian
> Package: Org-mode version 7.7 (release_7.7.160.g3e33)
>
> current state:
> ==============
> (setq
>  org-export-latex-after-initial-vars-hook '(org-beamer-after-initial-vars)
>  org-speed-command-hook '(org-speed-command-default-hook org-babel-speed-command-hook)
>  org-babel-load-languages '((asymptote . t) (ditaa . t) (dot . t) (gnuplot . t) (haskell . t) (latex . t) (octave . t)
>  			  	           (R . t) (ruby . t) (scheme . t) (sh . t))
>  org-metaup-hook '(org-babel-load-in-session-maybe)
>  org-after-todo-state-change-hook '(org-clock-out-if-current)
>  org-babel-tangle-lang-exts '(("ruby" . "rb") ("latex" . "tex") ("haskell" . "hs") ("asymptote" . "asy")
>  			    	            ("emacs-lisp" . "el"))
>  org-export-blocks-postblock-hook '(org-exp-res/src-name-cleanup)
>  org-export-latex-format-toc-function 'org-export-latex-format-toc-default
>  org-tab-first-hook '(org-hide-block-toggle-maybe org-src-native-tab-command-maybe org-babel-hide-result-toggle-maybe)
>  org-src-mode-hook '(org-src-babel-configure-edit-buffer org-src-mode-configure-edit-buffer)
>  org-confirm-shell-link-function 'yes-or-no-p
>  org-export-first-hook '(org-beamer-initialize-open-trackers)
>  org-agenda-before-write-hook '(org-agenda-add-entry-text)
>  org-blank-before-new-entry nil
>  org-babel-pre-tangle-hook '(save-buffer)
>  org-cycle-hook '(org-cycle-hide-archived-subtrees org-cycle-hide-drawers org-cycle-show-empty-lines
>  		  org-optimize-window-after-visibility-change)
>  org-export-preprocess-before-normalizing-links-hook '(org-remove-file-link-modifiers)
>  org-mode-hook '(#[nil "\300\301\302\303\304$\207" [org-add-hook change-major-mode-hook org-show-block-all append local]
>  	          5]
> 			 #[nil "\300\301\302\303\304$\207"
> 			          [org-add-hook change-major-mode-hook org-babel-show-result-all append local] 5]
> 				  		 org-babel-result-hide-spec org-babel-hide-all-hashes)
>  org-ctrl-c-ctrl-c-hook '(org-babel-hash-at-point org-babel-execute-safely-maybe)
>  org-confirm-elisp-link-function 'yes-or-no-p
>  org-export-interblocks '((lob org-babel-exp-lob-one-liners) (src org-babel-exp-inline-src-blocks))
>  org-clock-out-hook '(org-clock-remove-empty-clock-drawer)
>  org-occur-hook '(org-first-headline-recenter)
>  org-from-is-user-regexp nil
>  org-export-preprocess-before-selecting-backend-code-hook '(org-beamer-select-beamer-code)
>  org-confirm-babel-evaluate nil
>  org-export-latex-final-hook '(org-beamer-amend-header org-beamer-fix-toc org-beamer-auto-fragile-frames
>  			     			              org-beamer-place-default-actions-for-lists)
>  org-metadown-hook '(org-babel-pop-to-session-maybe)
>  org-export-blocks '((src org-babel-exp-src-block nil) (comment org-export-blocks-format-comment t)
>  		        (ditaa org-export-blocks-format-ditaa nil) (dot org-export-blocks-format-dot nil))
>  )
>  
>

-- 
Eric Schulte
http://cs.unm.edu/~eschulte/

  reply	other threads:[~2011-08-21 18:24 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-19 22:38 Bug: Babel: haskell code evaluation inconsistency [7.7 (release_7.7.160.g3e33)] Major A
2011-08-21 18:24 ` Eric Schulte [this message]
2011-08-23  8:56   ` András Major
2011-08-23 14:20     ` Eric Schulte

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=87aab2bp2m.fsf@gmail.com \
    --to=schulte.eric@gmail.com \
    --cc=andras.g.major@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).