From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Schulte Subject: Re: Bug: Babel: haskell code evaluation inconsistency [7.7 (release_7.7.160.g3e33)] Date: Sun, 21 Aug 2011 12:24:17 -0600 Message-ID: <87aab2bp2m.fsf@gmail.com> References: <20110819223851.GA3315@discus> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([140.186.70.92]:47407) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QvCh7-0001gd-Go for emacs-orgmode@gnu.org; Sun, 21 Aug 2011 14:24:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QvCh5-0005Mr-Sk for emacs-orgmode@gnu.org; Sun, 21 Aug 2011 14:24:25 -0400 Received: from mail-gy0-f169.google.com ([209.85.160.169]:55423) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QvCh5-0005Mn-MD for emacs-orgmode@gnu.org; Sun, 21 Aug 2011 14:24:23 -0400 Received: by gyg10 with SMTP id 10so3331295gyg.0 for ; Sun, 21 Aug 2011 11:24:23 -0700 (PDT) In-Reply-To: <20110819223851.GA3315@discus> (Major A.'s message of "Sat, 20 Aug 2011 00:38:52 +0200") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Major A Cc: emacs-orgmode@gnu.org Major A 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=C3=A1s > > > > 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: > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > (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) (gnuplo= t . 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-comm= and-maybe org-babel-hide-result-toggle-maybe) > org-src-mode-hook '(org-src-babel-configure-edit-buffer org-src-mode-con= figure-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-li= nk-modifiers) > org-mode-hook '(#[nil "\300\301\302\303\304$\207" [org-add-hook change-m= ajor-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-a= ll 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-safel= y-maybe) > org-confirm-elisp-link-function 'yes-or-no-p > org-export-interblocks '((lob org-babel-exp-lob-one-liners) (src org-bab= el-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-se= lect-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-expor= t-blocks-format-comment t) > (ditaa org-export-blocks-format-ditaa nil) (dot org-export-blo= cks-format-dot nil)) > ) >=20=20 > --=20 Eric Schulte http://cs.unm.edu/~eschulte/