Documentation
Commentary
ML-style pattern matching.
The entry points are autoloaded.
Todo:
- Allow to provide new `pcase--split-<foo>' thingy.
- provide something like (setq VAR) so a var can be set rather than
let-bound.
- provide a way to continue matching to subsequent cases
(e.g. Like Racket's (=> ID).
- try and be more clever to reduce the size of the decision tree, and
to reduce the number of leaves that need to be turned into functions:
- first, do the tests shared by all remaining branches (it will have
to be performed anyway, so better do it first so it's shared).
- then choose the test that discriminates more (?).
- provide Agda's `with' (along with its `...' companion).
- implement (not PAT). This might require a significant redesign.
- ideally we'd want (pcase s ((re RE1) E1) ((re RE2) E2)) to be able to
generate a lex-style DFA to decide whether to run E1 or E2.
While the first version was written before I knew about Racket's `match'
construct, the second version was significantly influenced by it,
so a good presentation of the underlying ideas can be found at:
Extensible Pattern Matching in an Extensible Language
Sam Tobin-Hochstadt, 2010
https://arxiv.org/abs/1106.2578
Consumers
Reverse Dependencies
- cl-generic
- edebug
- emacs
- company
- company-qml
- emojify
- esxml
- f3
- flycheck
- flycheck-irony
- flycheck-purescript
- mbe
- meghanada
- mu4e-alert
- package-lint
- pcre2el
- rtags
- wordgen
- flycheck-rust
- lsp-mode
- ebdb
- lean-mode
- colormaps
- graphql
- lispy
- lsp-ui
- ac-php
- utop
- refine
- speeddating
- langtool
- helm-rg
- treemacs
- rustic
- elsa
- veri-kompass
- buttercup-junit
- flycheck-ensime
- ess-smart-equals
- ack
- counsel-ffdata
- bongo
- opam
- borg
- fuz
- ivy-fuz
- flycheck-relint
- tree-sitter
- phpstan
- backtrace
- thread
- org-runbook
- zpresent
- notmuch
- psalm
- lsp-metals
- flycheck-aspell
- shrface
- docopt
- ascii-art-to-unicode
- el-search
- valign
- sallet
- package-build
- meow
- tree-sitter-langs
- shell-command+
- loopy
- calibredb
- ftable
- gnorb
- julia-formatter
- litex-mode
- persistent-scratch
- vundo
- gdb-mi
- mhtml-mode
- flx-rs
- counsel-at-point
- hl-block-mode
- hl-prog-extra
- idle-highlight-mode
- revert-buffer-all
- undo-fu-session
- pet
- flymake-proselint
- help-find
- agtags
- ement
- php-mode
- jsonrpc
- python
- eglot
- emms
- eldoc-box
- hyperdrive
- gosh-mode
- kaesar
- prog-face-refine
- do-at-point
- mistty
- consult-todo
- coercion
- org-transclusion
- binky
- git-cliff
- mini-echo
- wiz
- org-transclusion-http
- transient
- earl
- disproject
- eglot-inactive-regions
- turtles
- sideline-flycheck
- sideline-flymake
- ddp
- fontsloth
- slothbar
- org-srs
- listen
- shift-number
- advent-mode
- agitjo
- jabber
- xht
- mondo
- orgreadme-fy
- vexil
- shexc-ts-mode