6b456c1b7a
Currently paying the price of months of non-diligent git usage. Here's what has changed. - Theming support in Gvcci and wpgtk - Dropping support for i3 - Supporting EXWM - Many Elisp modules - Collapsed redundant directories in ./configs
30 lines
711 B
EmacsLisp
30 lines
711 B
EmacsLisp
;;; monoid.el --- Working with Monoids in Elisp -*- lexical-binding: t -*-
|
|
;; Author: William Carroll <wpcarro@gmail.com>
|
|
|
|
;;; Commentary:
|
|
;; The day has finally arrived where I'm using Monoids in Elisp.
|
|
;;
|
|
;; The monoid typeclass is as follows:
|
|
;; - empty :: a
|
|
;; - concat :: (list a) -> a
|
|
|
|
;;; Code:
|
|
|
|
;; TODO: Consider a prelude version that works for all Elisp types.
|
|
(defun monoid/classify (xs)
|
|
"Return the type of `XS'."
|
|
(cond
|
|
((listp xs) 'list)
|
|
((vectorp xs) 'vector)
|
|
((stringp xs) 'string)))
|
|
|
|
|
|
(defun monoid/empty (xs)
|
|
"Return the empty monoid for the type `XS'."
|
|
(pcase (monoid/classify xs)
|
|
('list '())
|
|
('vector [])
|
|
('string "")))
|
|
|
|
(provide 'monoid)
|
|
;;; monoid.el ends here
|