At 2020-02-28 14:21:11, "Zhu Zihao" <all_but_last@163.com> wrote:
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) ;=> nilBy 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?