From 2df74ac1175225b1e3080acb3e7ea61ad16424f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Sat, 7 Sep 2013 15:51:29 +0200 Subject: [PATCH] doc: Add "Data Types and Pattern Matching" to the Coding Style. * HACKING (Data Types and Pattern Matching): New section. --- HACKING | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/HACKING b/HACKING index 85e9a900be..ef8fb27cbe 100644 --- a/HACKING +++ b/HACKING @@ -108,6 +108,18 @@ However, it is OK for a “host-side” module to use a build-side module. Modules that deal with the broader GNU system should be in the (gnu …) name space rather than (guix …). +** Data Types and Pattern Matching + +The tendency in classical Lisp is to use lists to represent everything, and +then to browse them “by hand” using ‘car’, ‘cdr’, ‘cadr’, and co. There are +several problems with that style, notably the fact that it is hard to read, +error-prone, and a hindrance to proper type error reports. + +Guix code should define appropriate data types (for instance, using +‘define-record-type*’) rather than abuse lists. In addition, it should use +pattern matching, via Guile’s (ice-9 match) module, especially when matching +lists. + ** Formatting Code When writing Scheme code, we follow common wisdom among Scheme programmers.