Safe and sound STRef
oleg@pobox.com
oleg@pobox.com
Tue, 3 Jun 2003 11:18:43 -0700 (PDT)
> Heaps should be more dynamic than this; the (type of the) *reference*
> should encode the type it points to, but the (type of the) *heap*
> should not.
However, the heap can store polymorphic values. Therefore, we can use
a heap to store the polymorphic heap... Your example, slightly
re-written as follows, types
test5 = do
let heapi = init_gh
let (href,heap2) = alloc_gh undefined heapi
let (mr,heap1) =
if 1<2 then
let (xr,h) = alloc_gh 42 heapi
heap2' = alter_gh href h heap2
in (Just xr,heap2')
else
(Nothing,heap2)
print $
case mr of
Nothing -> ""
Just r -> show (fetch_gh r (fetch_gh href heap1))
and even prints the answer to everything...