From 695d42615cf345bd25617f927f5697dc1d352cec Mon Sep 17 00:00:00 2001 From: William Carroll Date: Thu, 24 Nov 2022 22:19:02 -0800 Subject: feat(wpcarro/emacs): Package tuple.el Should delete this pkg, but bytes.el depends on it, so let's first package it, and then we can delete it once CI passes/failures are more reliable. Change-Id: Ifa939264c44adf302085a19790cf25225cd3cb5e Reviewed-on: https://cl.tvl.fyi/c/depot/+/7393 Reviewed-by: wpcarro Tested-by: BuildkiteCI --- users/wpcarro/emacs/.emacs.d/wpc/tuple.el | 93 ------------------------------ users/wpcarro/emacs/default.nix | 1 + users/wpcarro/emacs/pkgs/tuple/default.nix | 10 ++++ users/wpcarro/emacs/pkgs/tuple/tuple.el | 93 ++++++++++++++++++++++++++++++ 4 files changed, 104 insertions(+), 93 deletions(-) delete mode 100644 users/wpcarro/emacs/.emacs.d/wpc/tuple.el create mode 100644 users/wpcarro/emacs/pkgs/tuple/default.nix create mode 100644 users/wpcarro/emacs/pkgs/tuple/tuple.el diff --git a/users/wpcarro/emacs/.emacs.d/wpc/tuple.el b/users/wpcarro/emacs/.emacs.d/wpc/tuple.el deleted file mode 100644 index 848c6fa48b..0000000000 --- a/users/wpcarro/emacs/.emacs.d/wpc/tuple.el +++ /dev/null @@ -1,93 +0,0 @@ -;;; tuple.el --- Tuple API for Elisp -*- lexical-binding: t -*- - -;; Author: William Carroll -;; Version: 0.0.1 -;; Package-Requires: ((emacs "25.1")) - -;;; Commentary: -;; Work with cons cells with two elements with a familiar API for those who have -;; worked with tuples before. - -;;; Code: - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Library -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(cl-defstruct tuple first second) - -;; Create -(defun tuple-new () - "Return an empty tuple." - (make-tuple :first nil - :second nil)) - -(defun tuple-from (a b) - "Return a new tuple from A and B." - (make-tuple :first a - :second b)) - -(defun tuple-from-dotted (dp) - "Convert dotted pair, DP, into a tuple." - (tuple-from (car dp) (cdr dp))) - -;; Read -(defun tuple-first (pair) - "Return the first element of PAIR." - (tuple-first pair)) - -(defun tuple-second (pair) - "Return the second element of PAIR." - (tuple-second pair)) - -;; Update -(defun tuple-map-each (f g pair) - "Apply F to first, G to second in PAIR." - (->> pair - (tuple-map-first f) - (tuple-map-second g))) - -(defun tuple-map (f pair) - "Apply F to PAIR." - (let ((pair-copy (copy-tuple pair))) - (funcall f pair-copy))) - -(defun tuple-map-first (f pair) - "Apply function F to the first element of PAIR." - (let ((pair-copy (copy-tuple pair))) - (setf (tuple-first pair-copy) (funcall f (tuple-first pair-copy))) - pair-copy)) - -(defun tuple-map-second (f pair) - "Apply function F to the second element of PAIR." - (let ((pair-copy (copy-tuple pair))) - (setf (tuple-second pair-copy) (funcall f (tuple-second pair-copy))) - pair-copy)) - -(defun tuple-set-first (a pair) - "Return a new tuple with the first element set as A in PAIR." - (tuple-map-first (lambda (_) a) pair)) - -(defun tuple-set-second (b pair) - "Return a new tuple with the second element set as B in PAIR." - (tuple-map-second (lambda (_) b) pair)) - -;; Delete -(defun tuple-delete-first (pair) - "Return PAIR with the first element set to nil." - (tuple-set-first nil pair)) - -(defun tuple-delete-second (pair) - "Return PAIR with the second element set to nil." - (tuple-set-second nil pair)) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Predicates -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(defun tuple-instance? (x) - "Return t if X is a tuple." - (tuple-p x)) - -(provide 'tuple) -;;; tuple.el ends here diff --git a/users/wpcarro/emacs/default.nix b/users/wpcarro/emacs/default.nix index bf58a275b3..19014dd646 100644 --- a/users/wpcarro/emacs/default.nix +++ b/users/wpcarro/emacs/default.nix @@ -52,6 +52,7 @@ let string struct symbol + tuple vterm-mgt zle ]) ++ diff --git a/users/wpcarro/emacs/pkgs/tuple/default.nix b/users/wpcarro/emacs/pkgs/tuple/default.nix new file mode 100644 index 0000000000..0626370e47 --- /dev/null +++ b/users/wpcarro/emacs/pkgs/tuple/default.nix @@ -0,0 +1,10 @@ +{ pkgs, depot, ... }: + +pkgs.callPackage + ({ emacsPackages }: + emacsPackages.trivialBuild { + pname = "tuple"; + version = "1.0.0"; + src = ./tuple.el; + }) +{ } diff --git a/users/wpcarro/emacs/pkgs/tuple/tuple.el b/users/wpcarro/emacs/pkgs/tuple/tuple.el new file mode 100644 index 0000000000..848c6fa48b --- /dev/null +++ b/users/wpcarro/emacs/pkgs/tuple/tuple.el @@ -0,0 +1,93 @@ +;;; tuple.el --- Tuple API for Elisp -*- lexical-binding: t -*- + +;; Author: William Carroll +;; Version: 0.0.1 +;; Package-Requires: ((emacs "25.1")) + +;;; Commentary: +;; Work with cons cells with two elements with a familiar API for those who have +;; worked with tuples before. + +;;; Code: + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Library +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(cl-defstruct tuple first second) + +;; Create +(defun tuple-new () + "Return an empty tuple." + (make-tuple :first nil + :second nil)) + +(defun tuple-from (a b) + "Return a new tuple from A and B." + (make-tuple :first a + :second b)) + +(defun tuple-from-dotted (dp) + "Convert dotted pair, DP, into a tuple." + (tuple-from (car dp) (cdr dp))) + +;; Read +(defun tuple-first (pair) + "Return the first element of PAIR." + (tuple-first pair)) + +(defun tuple-second (pair) + "Return the second element of PAIR." + (tuple-second pair)) + +;; Update +(defun tuple-map-each (f g pair) + "Apply F to first, G to second in PAIR." + (->> pair + (tuple-map-first f) + (tuple-map-second g))) + +(defun tuple-map (f pair) + "Apply F to PAIR." + (let ((pair-copy (copy-tuple pair))) + (funcall f pair-copy))) + +(defun tuple-map-first (f pair) + "Apply function F to the first element of PAIR." + (let ((pair-copy (copy-tuple pair))) + (setf (tuple-first pair-copy) (funcall f (tuple-first pair-copy))) + pair-copy)) + +(defun tuple-map-second (f pair) + "Apply function F to the second element of PAIR." + (let ((pair-copy (copy-tuple pair))) + (setf (tuple-second pair-copy) (funcall f (tuple-second pair-copy))) + pair-copy)) + +(defun tuple-set-first (a pair) + "Return a new tuple with the first element set as A in PAIR." + (tuple-map-first (lambda (_) a) pair)) + +(defun tuple-set-second (b pair) + "Return a new tuple with the second element set as B in PAIR." + (tuple-map-second (lambda (_) b) pair)) + +;; Delete +(defun tuple-delete-first (pair) + "Return PAIR with the first element set to nil." + (tuple-set-first nil pair)) + +(defun tuple-delete-second (pair) + "Return PAIR with the second element set to nil." + (tuple-set-second nil pair)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Predicates +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defun tuple-instance? (x) + "Return t if X is a tuple." + (tuple-p x)) + +(provide 'tuple) +;;; tuple.el ends here -- cgit 1.4.1