about summary refs log tree commit diff
path: root/configs/shared/.emacs.d/wpc/polymorphism.el
blob: 09045f7fb2584a5f4f4df184ca148ac5b1cb0d98 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
;;; polymorphism.el --- Sketching my ideas for polymorphism in Elisp -*- lexical-binding: t -*-
;; Author: William Carroll <wpcarro@gmail.com>

;;; Commentary:
;; Once again: modelled after Elixir.

;;; Code:

;; More sketches of Elisp polymorphism initiative.
;;
;; Two macros:
;; - `defprotocol'
;; - `definstance'
;;
;; Is it just a coincidence that these two macros have the same number of
;;characters or is that fate?  I say fate.
;;
;; (defprotocol monoid
;;   :functions (empty concat))
;;
;; (definstance monoid vector
;;   :empty
;;   (lambda () [])
;;   :concat
;;   #'vector/concat)
;;
;; More sketching...
;; (defun monoid/empty ()
;;   "Sketch."
;;   (funcall #'(,(monoid/classify)/empty)))
;; (defun monoid/concat (xs)
;;   "Sketch."
;;   (apply #'(,(monoid/classify)/concat) args))


(provide 'polymorphism)
;;; polymorphism.el ends here