Rosette procedures are references to procedure objects, just like in Racket.
Two procedure references are eq? and equal? only if they point to the
same procedure object. Procedures may be concrete or symbolic. Symbolic procedures
may, in the worst case, take as much time to execute as the slowest concrete procedure to
which any symbolic procedure could evaluate under any solution?.
Rosette lifts the following operations on procedures:
procedure?, apply, compose, compose1, procedure-rename, identity, const, thunk, thunk*, negate, curry, curryr, prop:procedure