From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id UI/jKGI0sF79WwAA0tVLHw (envelope-from ) for ; Mon, 04 May 2020 15:27:30 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id 6CIrM200sF5QXgAAbx9fmQ (envelope-from ) for ; Mon, 04 May 2020 15:27:41 +0000 Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:470:142::17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id CE95B941E15 for ; Mon, 4 May 2020 15:26:41 +0000 (UTC) Received: from localhost ([::1]:42768 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jVczS-0006M9-7J for larch@yhetil.org; Mon, 04 May 2020 11:26:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59536) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jVcyt-0006Ii-Ju for emacs-orgmode@gnu.org; Mon, 04 May 2020 11:26:07 -0400 Received: from relay10.mail.gandi.net ([217.70.178.230]:45017) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jVcyr-0002v5-K0 for emacs-orgmode@gnu.org; Mon, 04 May 2020 11:26:07 -0400 Received: from localhost (40-67.ipv4.commingeshautdebit.fr [185.131.40.67]) (Authenticated sender: admin@nicolasgoaziou.fr) by relay10.mail.gandi.net (Postfix) with ESMTPSA id 03B7A240017; Mon, 4 May 2020 15:26:01 +0000 (UTC) From: Nicolas Goaziou To: Roland Coeurjoly Subject: Re: Fwd: Support compilation of Haskell in org mode babel blocks. References: Mail-Followup-To: Roland Coeurjoly , emacs-orgmode@gnu.org Date: Mon, 04 May 2020 17:26:00 +0200 In-Reply-To: (Roland Coeurjoly's message of "Tue, 28 Apr 2020 16:56:37 +0200") Message-ID: <87v9lb3enr.fsf@nicolasgoaziou.fr> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.178.230; envelope-from=mail@nicolasgoaziou.fr; helo=relay10.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/04 11:26:02 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: emacs-orgmode@gnu.org Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Scanner: scn0 X-Spam-Score: -1.01 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of emacs-orgmode-bounces@gnu.org designates 2001:470:142::17 as permitted sender) smtp.mailfrom=emacs-orgmode-bounces@gnu.org X-Scan-Result: default: False [-1.01 / 13.00]; RCVD_VIA_SMTP_AUTH(0.00)[]; GENERIC_REPUTATION(0.00)[-0.49487391554279]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(-0.20)[+ip6:2001:470:142::/48:c]; IP_REPUTATION_HAM(0.00)[asn: 22989(0.13), country: US(-0.00), ip: 2001:470:142::17(-0.49)]; DWL_DNSWL_FAIL(0.00)[2001:470:142::17:server fail]; MX_GOOD(-0.50)[cached: eggs.gnu.org]; RCPT_COUNT_TWO(0.00)[2]; MAILLIST(-0.20)[mailman]; FREEMAIL_TO(0.00)[gmail.com]; RCVD_IN_DNSWL_FAIL(0.00)[2001:470:142::17:server fail]; RCVD_TLS_LAST(0.00)[]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:22989, ipnet:2001:470:142::/48, country:US]; MID_RHS_MATCH_FROM(0.00)[]; TAGGED_FROM(0.00)[larch=yhetil.org]; ARC_NA(0.00)[]; RCVD_COUNT_FIVE(0.00)[5]; FROM_NEQ_ENVFROM(0.00)[mail@nicolasgoaziou.fr,emacs-orgmode-bounces@gnu.org]; FROM_HAS_DN(0.00)[]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; MIME_GOOD(-0.10)[text/plain]; R_DKIM_NA(0.00)[]; DMARC_NA(0.00)[nicolasgoaziou.fr]; HAS_LIST_UNSUB(-0.01)[]; FORGED_SENDER_MAILLIST(0.00)[] X-TUID: ujRxxJvbYozW Hello, Roland Coeurjoly writes: > From 091f470a278561a60fac1ee3ee658f6823bc2503 Mon Sep 17 00:00:00 2001 > From: Roland Coeurjoly > Date: Sat, 25 Apr 2020 20:35:22 +0200 > Subject: [PATCH] Add Haskell specific header argument compile, to compile > instead of interpret the body of source block Thank you! Could you rewrite the commit message so that it is on par with our conventions? It could be something like: ob-haskell: introduce :compile header argument * lisp/ob-haskell (org-babel-haskell-compiler): (org-babel-header-args:haskell): new variables. (org-babel-haskell-execute): (org-babel-haskell-interpret): new functions. (org-babel-execute:haskell): use new functions. > -;; Org-Babel support for evaluating haskell source code. This one will > -;; be sort of tricky because haskell programs must be compiled before > +;; Org-Babel support for evaluating Haskell source code. > +;; Haskell programs must be compiled before "Org Babel" would be even better, while you're changing this line. > +(defcustom org-babel-Haskell-compiler "ghc" No need to capitalize Haskell here. > + "Command used to compile a Haskell source code file into an executable. > +May be either a command in the path, like ghc like "ghc" > +or an absolute path name, like /usr/local/bin/ghc like "/usr/local/bin/ghc". > +parameter may be used, like ghc -v" The command can include a parameter, such as "ghc -v". > + :group 'org-babel > + :version "27.0" It should be :package-version '(Org "9.4") instead. > + :type 'string) > + > +(defconst org-babel-header-args:haskell '((compile . :any)) > + "Haskell-specific header arguments.") > + > +(defun org-babel-Haskell-execute (body params) > + "This function should only be called by `org-babel-execute:haskell'" > + (let* ((tmp-src-file (org-babel-temp-file > + "Haskell-src-" > + ".hs")) Indentation seems a bit off. > + (tmp-bin-file > + (org-babel-process-file-name > + (org-babel-temp-file "Haskell-bin-" org-babel-exeext))) > + (cmdline (cdr (assq :cmdline params))) > + (cmdline (if cmdline (concat " " cmdline) "")) > + (flags (cdr (assq :flags params))) > + (flags (mapconcat 'identity Nitpick: #'identity > + (if (listp flags) flags (list flags)) " ")) > + (libs (org-babel-read > + (or (cdr (assq :libs params)) > + (org-entry-get nil "libs" t)) > + nil)) Ditto, mind the indentation. > + (libs (mapconcat #'identity > + (if (listp libs) libs (list libs)) > + " "))) > + (with-temp-file tmp-src-file (insert body)) > + (org-babel-eval > + (format "%s -o %s %s %s %s" > + org-babel-Haskell-compiler > + tmp-bin-file > + flags > + (org-babel-process-file-name tmp-src-file) > + libs) "") Please move the empty string below. > + (let ((results > + (org-babel-eval > + (concat tmp-bin-file cmdline) ""))) > + (when results > + (setq results (org-trim (org-remove-indentation results))) > + (org-babel-reassemble-table > + (org-babel-result-cond (cdr (assq :result-params params)) > + (org-babel-read results t) > + (let ((tmp-file (org-babel-temp-file "Haskell-"))) > + (with-temp-file tmp-file (insert results)) > + (org-babel-import-elisp-from-file tmp-file))) > + (org-babel-pick-name > + (cdr (assq :colname-names params)) (cdr (assq :colnames params))) > + (org-babel-pick-name > + (cdr (assq :rowname-names params)) (cdr (assq :rownames params))))) > + ))) Please move the closing parens on the line above. > + > +(defun org-babel-interpret-Haskell (body params) Why capitalization in function names? > (require 'inf-haskell) > (add-hook 'inferior-haskell-hook > (lambda () > @@ -96,6 +154,14 @@ org-babel-execute:haskell > (org-babel-pick-name (cdr (assq :rowname-names params)) > (cdr (assq :rowname-names params)))))) > > + > +(defun org-babel-execute:haskell (body params) > + "Execute a block of Haskell code." > + (setq compile (string= (cdr (assq :compile params)) "yes")) Use a let-binding instead of setq. Could you send an updated patch? Regards, -- Nicolas Goaziou