In last month I sent an email to request for some comments on weak reference facilities in Emacs. Now I create a new lisp library -- cell.el, which implemented weak reference in Elisp using weak hash table and some more util.
There are 3 kinds of cell in cell.el
- Option :: Giving "existence" information for a value, Like Maybe type in Haskell or Optional type in Java.
- Box :: Like a single element vector, create a mutable storage.
- Weak :: Weak reference I mentioned above.
IMO, these can help user to build Elisp application in more convenient way.
For a simple example.
(plist-get '(:key nil) :key) ; => nil
(plist-get '(:key nil) :val) ;=> nil
By using Option Cell, we can differentiate these two status.
(defun clear-plist-get (plist key)
(pcase (plist-member plist key)
(`(,_k ,v)
(cell-option-some v))
(_
(cell-option-none))))
(let ((plist '(:key nil)))
(plist-get plist :key) ;=> nil
(plist-get plist :val) ;=> nil
(clear-plist-get plist :key) ;=> Some(nil)
(clear-plist-get plist :val) ;=> None
)
I don't want to break the behaviour of plist-get, just a example to show the power of Option Cell. And there are detailed description in ;;; Commentary section.
Would you consider this to be included in Emacs core, or publish it on GNU ELPA?