Skip to main content


Just spent a good half hour pulling my hair out trying to figure out why one of the #elisp functions I had just written was always returning nil when I tested it. Turns out, my test was mistakenly passing its inputs to the wrong (but similarly named) function (pivot-table-get-columns instead of pivot-table-get-body).

#Haskell's type system would've caught this. 🙃

#emacs #lisp

in reply to Jonathan Lamothe

C's type system would also have caught it, and it isn't worth a hill of beans.

By caught it what do we mean? This is not a case of some undetected error escaping your attention due to dynamic typing. You know you got a nil which is unexpected and wrong. It's in a test case which catches it.

The only thing a type system would change is that you would instead waste a half hour not understanding how your obviously correct function call can possibly have the wrong return type.

in reply to Kazinator

@Kazinator I feel that that would have been much more useful information. nil is about the least useful failure state there is.


For all the criticism I have of dynamically typed languages, I have to admit that the way #elisp (and presumably #lisp in general) does in-line documentation is pretty nice.


The seemingly canonical way of detecting whether the C-u modifier was used on an interactive function call (when an actual numerical argument wasn't provided) in #elisp feels... icky. #emacs
in reply to Jonathan Lamothe

To be fair C-u *is* a numerical argument so you're not really meant to differentiate (it means the number 4). 😅
in reply to Alessio Vanni

@Alessio Vanni Yeah, it's just very magic number-ey.

Ah well, such is the way it is with legacy code sometimes. No way to change it without breaking about a billion other things.



I wonder how difficult it would be to introduce rudimentary namespaces into #elisp.

#emacs

Harald reshared this.

in reply to Jonathan Lamothe

Just learned about interned vs. uninterned symbols. Feels like this would be a big piece of this puzzle.

This website uses cookies. If you continue browsing this website, you agree to the usage of cookies.