* [PATCH] Send table rows to OCaml as tuples
@ 2022-02-23 19:39 necaris
2022-11-17 11:35 ` Ihor Radchenko
0 siblings, 1 reply; 2+ messages in thread
From: necaris @ 2022-02-23 19:39 UTC (permalink / raw)
To: emacs-orgmode; +Cc: Rami Chowdhury
From: Rami Chowdhury <necaris@gmail.com>
Previously, tables (i.e. lists-of-lists) came through as
arrays-of-arrays. Since OCaml arrays are required to be homogeneous in
their types, this meant tables with heterogenous types within a row
could not be handled. This change represents tables as arrays of tuples,
which is more flexible, while preserving the previous behavior for
lists.
* lisp/ob-ocaml.el (org-babel-ocaml-elisp-to-ocaml-tuple,
org-babel-ocaml-elisp-to-ocaml-array, org-babel-elisp-to-ocaml): Send
table rows as tuples
---
lisp/ob-ocaml.el | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/lisp/ob-ocaml.el b/lisp/ob-ocaml.el
index 80df795..ad7df97 100644
--- a/lisp/ob-ocaml.el
+++ b/lisp/ob-ocaml.el
@@ -123,11 +123,23 @@
(org-babel-ocaml-elisp-to-ocaml (cdr pair))))
(org-babel--get-vars params)))
+(defun org-babel-ocaml-elisp-to-ocaml-tuple (val &optional nested-renderer-f)
+ "Return OCaml evaluating to VAL, with elements rendered by NESTED-RENDERER-F."
+ (let ((renderer (or nested-renderer-f #'org-babel-ocaml-elisp-to-ocaml)))
+ (concat "(" (mapconcat renderer val ", ") ")")))
+
+(defun org-babel-ocaml-elisp-to-ocaml-array (val &optional nested-renderer-f)
+ "Return OCaml evaluating to VAL, with elements rendered by NESTED-RENDERER-F."
+ (let ((renderer (or nested-renderer-f #'org-babel-ocaml-elisp-to-ocaml)))
+ (concat "[|" (mapconcat renderer val "; ") "|]")))
+
(defun org-babel-ocaml-elisp-to-ocaml (val)
"Return a string of ocaml code which evaluates to VAL."
- (if (listp val)
- (concat "[|" (mapconcat #'org-babel-ocaml-elisp-to-ocaml val "; ") "|]")
- (format "%S" val)))
+ (cond ((and (listp val) (listp (car val)))
+ (org-babel-ocaml-elisp-to-ocaml-array val #'org-babel-ocaml-elisp-to-ocaml-tuple))
+ ((listp val)
+ (org-babel-ocaml-elisp-to-ocaml-array val))
+ (t (format "%S" val))))
(defun org-babel-ocaml-parse-output (value type)
"Parse VALUE of type TYPE.
--
2.35.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] Send table rows to OCaml as tuples
2022-02-23 19:39 [PATCH] Send table rows to OCaml as tuples necaris
@ 2022-11-17 11:35 ` Ihor Radchenko
0 siblings, 0 replies; 2+ messages in thread
From: Ihor Radchenko @ 2022-11-17 11:35 UTC (permalink / raw)
To: necaris; +Cc: emacs-orgmode
necaris@gmail.com writes:
> From: Rami Chowdhury <necaris@gmail.com>
>
> Previously, tables (i.e. lists-of-lists) came through as
> arrays-of-arrays. Since OCaml arrays are required to be homogeneous in
> their types, this meant tables with heterogenous types within a row
> could not be handled. This change represents tables as arrays of tuples,
> which is more flexible, while preserving the previous behavior for
> lists.
Thanks for the patch, and sorry for the late reply.
The idea looks reasonable. However, the proposed change will break the
existing code that relies on the current behaviour.
Would it be possible to auto-detect when the types are homogeneous and
use arrays? Otherwise, use tuples, as you proposed.
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-11-17 11:36 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-02-23 19:39 [PATCH] Send table rows to OCaml as tuples necaris
2022-11-17 11:35 ` Ihor Radchenko
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.