Create a lazy value of a non-lazy value. The lazy value created will be already forced, for obvious reasons.
Create a lazy value of a function. The function will not be executed until the lazy value is first forced, and will only be executed once.
If the function raises an exception, all futures forces of the lazy value will also raise the same exception.
Force the lazy value.
If the function that produces the value throws an exception, this function will throw the same exception.
Returns true if the lazy value has been forced and did not throw an exception.
A monad is an abstraction of the concept of sequencing of computations. A value of type 'a monad represents a computation that returns a value of type 'a.
return v
returns the (trivial) computation that returns v.