Reifying the sharing in an
This module is based on Type-Safe Observable Sharing in Haskell (Andy Gill, Haskell Symposium, 2009).
|:: Typeable a|
|=> (forall a. ASTF dom a -> Maybe (Witness' ctx a))|
A function that decides whether a given node can be shared.
|-> ASTF dom a|
|-> IO (ASG ctx dom a)|
Convert a syntax tree to a sharing-preserving graph
This function is not referentially transparent (hence the
IO). However, it
is well-behaved in the sense that the worst thing that could happen is that
sharing is lost. It is not possible to get false sharing.