My goal here was to come up with a design that would enable the dynamic dispatch (function selection given input types) and expression evaluation to happen completely separately. So at the end, you obtain a tree of expressions to be evaluated in whatever way makes sense for your environment.
I haven't thought too much yet about functions that take tables / dataframes as inputs and/or outputs -- then you have to deal with column names and schemas, an extra layer of complexity.
Please see exposition on
https://docs.google.com/document/d/1YmsV48iO6YNSxCIC84Xig5z-i9g4g7rzYTmCgUAxKRk/edit#heading=h.4arfbxjfn0kq
My goal here was to come up with a design that would enable the dynamic dispatch (function selection given input types) and expression evaluation to happen completely separately. So at the end, you obtain a tree of expressions to be evaluated in whatever way makes sense for your environment.
I haven't thought too much yet about functions that take tables / dataframes as inputs and/or outputs -- then you have to deal with column names and schemas, an extra layer of complexity.