
2009/12/11 Luke Palmer
The idea being that any code that is pure could be evaluated anywhere with a very simple interpreter. If you have pure code, you can trace it back and evaluate it in a sandbox where you don't need a C runtime, a linker, or really anything but the simplest substitution engine. *All* effects bubble their way up to the top level, so that we know from the type signature of a value the machinery we will need to run it.
This sounds good but there is something puzzling about it. Where do we draw the line between "machinery" and "packages"? The types don't tell us what libraries we need. They don't tell us how much RAM/CPU we need, either.
Pure functional code as the minimal essence of pure computation -- everything else an EDSL.
Partial or total code? -- Jason Dusek