Moving all of my Emacs-related files into their own directory at the root of this repository.
		
			
				
	
	
		
			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
 |