| J. Hatcliff and O. Danvy. Thunks and the lambda calculus. Journal of Functional Programming, 7:303- 319, 1997. |
....in FIX is the translation of the callby name versions of Lain and to their call by value counterparts Lain and respectively (for pairing and projection, the situation is similar) The key for a solution is the definition of the suspension resp. the forcing functions (see also [9]) delay : a: cpo = a del delay f = LAM x. f) force : a: cpo)del = a force f = f UNIT) where a del is a type synonym for Unit a. Note that delay and force are already pure SML and can thus be converted easily. These definition leads to the following derived theorem, ....
....a) forcify f) delay a) lazy2eager] where forcify is defined by LAM x. f (force x) The translation is possible by using this rule in all applications in FixLemg; however, this technique leads to quite inefficient code. A remedy to this problem well known from compiler construction [9] is a strictness analysis that we mimic in our approach by the following derived rules: is strict f = f a) lift f) a) is strict(LAM x. x) is strict(x. UU) is strict(strictify f) is strict(NOT) is strict(SUe) I a. is strict f I] is strict (x. f x a) I a. ....
J. Hatcliff and O. Danvy. Thunks and the lambda calculus. Journal of Functional Programming, 7:303- 319, 1997.
....code generation in FIX is the translation of the callby name versions of Lam and to their call by value counterparts Lam and respectively (for pairing and projection, the situation is similar) The key for a solution is the de nition of the suspension resp. the forcing functions (see also [9]) delay : a: cpo = a del delay f = LAM x. f) force : a: cpo)del = a force f = f UNIT) where a del is a type synonym for Unit a. Note that delay and force are already pure SML and can thus be converted easily. These de nition leads to the following derived theorem, ....
.... a) forcify f) delay a) lazy2eager] where forcify is de ned by LAM x. f (force x) The translation is possible by using this rule in all applications in FixLang; however, this technique leads to quite inecient code. A remedy to this problem well known from compiler construction [9] is a strictness analysis that we mimic in our approach by the following derived rules: is strict f = f a) lift f) a) is strict(LAM x. x) is strict( x. UU) is strict(strictify f) is strict(NOT) is strict(SUC) a. is strict f ] is strict ( x. f x a) a. ....
J. Hatcli and O. Danvy. Thunks and the lambda calculus. Journal of Functional Programming, 7:303- 319, 1997.
....on ff. We plan to introduce a new type quantifier for type variables which interact with dynamic values, thus restoring parametricity. Finally, we have presented dyn as a call by value calculus. Using the well known embedding of the call by name lambda calculus into the call by value calculus [14], we could use dyn as an intermediate language for a call by name language in which let bound expressions (which create thunks or closures, which we represent as deferred expressions) could be tagged as statically or dynamically typed. This could be used to add a simple form of dynamic typing to ....
J. Hatcliff and O. Danvy. Thunks and the lambda-calculus. Journal of Functional Programming, 7(3):303--319, May 1997.
Online articles have much greater impact More about CiteSeer.IST Add search form to your site Submit documents Feedback
CiteSeer.IST - Copyright Penn State and NEC