15:44:07pjbjmercouris: (foo . bar) is a cons cell. A list such as (a b c d) is also a cons cell!!! It's (a . (b c d)). So you can match the two cons cells, and identify foo = a, and bar = (b c d). Therefore you can see that (foo . bar) is equivalent to (foo &rest bar).
15:52:05sjl_One thing that's mildly annoying that I run into: I often want to have a name-and-options parameter for a macro that's used like this: https://hg.stevelosh.com/chancery/file/tip/src/chancery.lisp#l224
15:53:06sjl_I could embed the destructuring (name &key foo bar baz) into the lambda list, but then callers wouldn't be able to give a bare symbol to mean a name with no options
15:54:04sjl_So either I embed the (name &key ...) into the lambda list, which is less code and more obvious for users when your editor shows you the lambda list as you type
15:54:41sjl_Or I do an opaque name-and-options in the lambda list, then (destructuring-bind (name ...) (alexandria:ensure-list name-and-options ...)) in the body
15:55:15sjl_Which lets users type foo instead of (foo), but is less helpful in the editor.
15:55:21sjl_I wish there were a way to have my cake and also eat it.
15:56:41jmercouriswhat I still can't figure out is how to wrap the macro :-\
15:56:49jmercouriseven with all of this information, I still can't get it
21:39:20puchaczokay, so I had decode and encode that was not specialised, so it was the first problem. I realised I should at least specialise on standard-object
21:39:58puchacznext, there are forward references, but they are only resolved if they are kept in alist or a hashmap, or an array, but not in the slot of the object