`make_list 'a' (make_list 'b' (make_list 'S' (make_list 'd' empty)))`). The
recipe for constructing the list goes like this:
-> (0) Start with the empty list []
-> (1) make a new list whose first element is 'd' and whose tail is the list constructed in step (0)
-> (2) make a new list whose first element is 'S' and whose tail is the list constructed in step (1)
-> -----------------------------------------
-> (3) make a new list whose first element is 'b' and whose tail is the list constructed in step (2)
+> (0) Start with the empty list []
+> (1) make a new list whose first element is 'd' and whose tail is the list constructed in step (0)
+> (2) make a new list whose first element is 'S' and whose tail is the list constructed in step (1)
+> -----------------------------------------
+> (3) make a new list whose first element is 'b' and whose tail is the list constructed in step (2)
> (4) make a new list whose first element is 'a' and whose tail is the list constructed in step (3)
What is the type of each of these steps? Well, it will be a function