Kent Pitman’s condition system for ANSI Common Lisp is a deep, far ranging and still unexplored frontier of computer science. The fact that you can match up unknown half-programs as kent calls them that get executed in the context they were signalled when a condition is signalled remains the most revolutionary idea in terms of conditions. As to how important conditions are- If you remember the weirdly timeless/completely modern 1972 article by Terry Winograd, Breaking The Complexity Barrier (Again), Terry briefly and somewhat apropos-nothing notes his belief that condition signalling and handling is the closest thing computers experience to human memory formation.
Deep. But my friend Aleteoryx, who often hangs out on the show (23 hours from now, live, every week) at 000UTC Wednesdays (American Tuesday nights) on anonradio was bemoaning their lack of powerful satisfaction in typed languages.
They wished - how great would it be if I could easily constrain an argument type to an integer from 0 to 20.
etypecase
(find type case or error) in common lisp(defun zero-to-20-only (x)
(etypecase x
((integer 0 20) :yes!)))
CL-USER> (zero-to-20-only 20)
:YES!
21 fell through ETYPECASE expression.
Wanted one of ((INTEGER 0 20)).
[Condition of type SB-KERNEL:CASE-FAILURE]
Restarts:
0: [RETRY] Retry SLIME REPL evaluation request.
1: [*ABORT] Return to SLIME's top level.
2: [ABORT] abort thread (#<THREAD "repl-thread" RUNNING {1004480003}>)
Backtrace:
0: (ZERO-TO-20-ONLY #<unavailable argument>)
1: (SB-INT:SIMPLE-EVAL-IN-LEXENV (ZERO-TO-20-ONLY 21) #<NULL-LEXENV>)
2: (EVAL (ZERO-TO-20-ONLY 21))
--more--
They mentioned they wanted powerful and deeply arbitrary type constraint satisfaction. My silly response was a type which is only satisfied when the current weekday is Tuesday.
CL-USER> (defun only-true-on-tuesdays (x)
(declare (ignore x))
(equal 1 (nth-value 6 (get-decoded-time))))
(deftype available-on-tuesdays ()
`(satisfies only-true-on-tuesdays))
AVAILABLE-ON-TUESDAYS
CL-USER> (typep 'hey 'available-on-tuesdays)
T
CL-USER> (typecase 'anything
(available-on-tuesdays 'well-maybe))
WELL-MAYBE
Of course, Aleteoryx tried it and got NIL because I live about 18 hours in the future at the moment.
Sorry for the silly and light-hearted article. We dealt with
etypecase
See everyone at the weekly show tomorrow. Check the mastodon for last week’s episode/archive for details.
screwlisp proposes kittens