12:12:05I729it expands the getter to a setter form
12:12:25I729as a function for eg AREF you have #'(SETF AREF)
12:13:08I729but in defstruct or defclass they are created so you don't have to bother
12:45:55edgar-rftIf I remeber right (but I might be wrong) then SETF appeared when arrays came to Lisp somewhere in the 1960s, and at that time it was an acronym for SET Field (of an array) as some sort of syntactic counterpart to AREF. Because SETF was implemented as a macro it was later expanded to SET other places, too, including symbols, what means that today it can even be used instead of SETQ.
12:47:00edgar-rftMany books today teach to use SETF instead of SETQ to avoid confusuion.
13:11:32edgar-rftIn Common Lisp THE emphasizes that something is of a specific data type. (the fixnum 42) might signal an error if 42 is a float. Makes of course more sense if used with variables.
13:17:49edgar-rftweak typing is what I do with my fingers :-)
13:18:42I729i know there is something on stackoverflow but for me with Haskell as my second main language I thought about how to make recursive algebraic data types
13:19:26phoeLisp types cannot refer to themselves because Lisp types are mostly based on set theory
13:20:00I729good to know, so with category theory it is possible
13:20:39phoethere is a loophole named SATSFIES that lets you do more creative things, but it comes at a cost - compilers cannot optimize those types well
13:21:18edgar-rftACTION wants types based on SETF theory :-)
13:21:39I729but so well I don't know GHC as how it is done there. maybe one day
16:57:10flip214with UIOP:launch-program, can I have arbitrary file handles passed on? Ie. create a socketpair or pipe and pass one end as FD 17 or whatever?
18:13:19etimmonsflip214: not portably. All implementations I'm aware of either close all extra file handles without a way to override (e.g., SBCL) or pass all of them on without a way to override (e.g., ECL)
18:14:51etimmonsBut if an implementation allows you to configure that, you can add the necessary keyword args to UIOP:LAUNCH-PROGRAM. It passes all unknown args through to the implementation, IIRC