Join GitHub today
GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.Sign up
Haskell values that cannot be evaluated immediately. http://gcross.github.com/procrastinat…
Fetching latest commit…
Cannot retrieve the latest commit at this time.
|Type||Name||Latest commit message||Commit time|
|Failed to load latest commit information.|
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.