On Apr 7, 2006, at 3:59 AM, Rene de Visser wrote:
Hello,
As deepSeq has a non local effect, I think it requires a non-local
source transformation to implement it. One option would be for the
compiler to create a second deepSeq version of every function
definition.
e.g.
If the user defines a function f
f x = g h x
then the compile creates an additional function !!f
!!f x = temp `seq` temp
where temp = !!g !!h x
which uses the compiler generated functions !!g and !!h.
It looks like library writers are increasingly doing this manually.
Creating a strict and non strict version of a number of the
functions provided. This would automate that.
Rene.
It depend on the semantics of deepSeq. If deepSeq just performs seq
on all constructors recursively, then
that can be implemented as a runtime primitive. If deepSeq is making
all embedded partial applications
strict, then yes this might be a non-local effect.
What are the semantics of !!(\ x -> ...)?
I am calling for the version of deepSeq/strict that evaluates all
thunks, but does not strictify the arguments
to partial application, because
- I believe this is straightforward to implement
- It does not change the semantics (any more than seq)
- I will address the problems we are trying to solve by ad-hoc
means at Galois.
Andy
_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://haskell.org/mailman/listinfo/haskell-prime