Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: d30410aefa
Fetching contributors…

Cannot retrieve contributors at this time

26 lines (23 sloc) 1.407 kb
Procrastinating variables ('PVar's) are meant to be used in cases
where you want to give someone a value that you do not have available
yet, but will definitely have ready by the time that they need to use
it.
'PVar's have the advantage that you do not make the user of your value
execute some kind of unwrapping routine in order to get access to the
value within. For example, this is useful when you are constructing
closures that you want to go ahead and construct now even though some
of the values that they contain are not available yet.
'PVar's are implemented with a lazy thunk that reads from an 'IORef';
before the 'IORef' is written to, it contains "bottom" (an exception
with a descriptive error message) so that an error is raised in the
user code if the variable is accidently accessed before the value is
ready.
NOTE: 'PVar's are modeled closely on the 'IVar' implementation in the
ivar-simple package. The major difference is that if you try to read
an 'IVar' before it has been given a value, it blocks until the value
is available, whereas reading from a 'PVar' before it is ready raises
an exception. The reason behind the different symantics for 'PVar' is
because if the user accidently accesses the value too early, you want
there to be a lot of noise to let him or her know about it, rather
than merely blocking the thread indefinitely and causing them to
wonder what went wrong.
Jump to Line
Something went wrong with that request. Please try again.