summary refs log tree commit diff
diff options
context:
space:
mode:
authorArun Isaac2022-12-25 00:49:24 +0000
committerArun Isaac2022-12-25 23:33:04 +0000
commit3304bdae6d3df5ec0dd5b737743cbd2109d50423 (patch)
treee01cce84a1e6bb43f172dcb4db05f7aea018aa68
parent3ff858a5fd78ee4b93af129149430bbd1b39a583 (diff)
downloadtissue-3304bdae6d3df5ec0dd5b737743cbd2109d50423.tar.gz
tissue-3304bdae6d3df5ec0dd5b737743cbd2109d50423.tar.lz
tissue-3304bdae6d3df5ec0dd5b737743cbd2109d50423.zip
web: themes: Add functional way to define methods.
* tissue/web/themes.scm: Import (srfi srfi-26).
(add-methods): New function.
-rw-r--r--tissue/web/themes.scm13
1 files changed, 12 insertions, 1 deletions
diff --git a/tissue/web/themes.scm b/tissue/web/themes.scm
index f1a107c..21de09b 100644
--- a/tissue/web/themes.scm
+++ b/tissue/web/themes.scm
@@ -17,6 +17,7 @@
 ;;; along with tissue.  If not, see <https://www.gnu.org/licenses/>.
 
 (define-module (tissue web themes)
+  #:use-module (srfi srfi-26)
   #:use-module (oop goops)
   #:export (<search-page>
             search-page-uri
@@ -27,7 +28,8 @@
             search-page-matched-open-issues
             search-page-matched-closed-issues
             search-page-matched-documents
-            search-page-matched-commits))
+            search-page-matched-commits
+            add-methods))
 
 (define-class <search-page> ()
   (uri #:getter search-page-uri #:init-keyword #:uri)
@@ -39,3 +41,12 @@
   (matched-closed-issues #:getter search-page-matched-closed-issues #:init-keyword #:matched-closed-issues)
   (matched-documents #:getter search-page-matched-documents #:init-keyword #:matched-documents)
   (matched-commits #:getter search-page-matched-commits #:init-keyword #:matched-commits))
+
+(define (add-methods generic . methods)
+  "Add @var{methods} to @var{generic} function. This is purely
+functional and operates on a copy of @var{generic}. It does not mutate
+@var{generic}."
+  (let ((clone (shallow-clone generic)))
+    (for-each (cut add-method! generic <>)
+              methods)
+    clone))