Safe Haskell  None 

This module is similar to Language.Syntactic.Sharing.Reify, but operates
on
rather than a general AST
(HODomain
ctx dom)AST
. The reason for
having this module is that when using HODomain
, it is important to do
simultaneous sharing analysis and HOLambda
reification. Obviously we cannot
do sharing analysis first (using
reifyGraph
from
Language.Syntactic.Sharing.Reify), since it needs to be able to look inside
HOLambda
. On the other hand, if we did HOLambda
reification first (using
reify
), we would destroy the sharing.
This module is based on TypeSafe Observable Sharing in Haskell (Andy Gill, Haskell Symposium, 2009).
 reifyGraphTop :: Typeable a => (forall a. ASTF (HODomain ctx dom) a > Maybe (SatWit ctx a)) > ASTF (HODomain ctx dom) a > IO (ASG ctx (Lambda ctx :+: (Variable ctx :+: dom)) a, VarId)
 reifyGraph :: Syntactic a (HODomain ctx dom) => (forall a. ASTF (HODomain ctx dom) a > Maybe (SatWit ctx a)) > a > IO (ASG ctx (Lambda ctx :+: (Variable ctx :+: dom)) (Internal a), VarId)
Documentation
reifyGraphTop :: Typeable a => (forall a. ASTF (HODomain ctx dom) a > Maybe (SatWit ctx a)) > ASTF (HODomain ctx dom) a > IO (ASG ctx (Lambda ctx :+: (Variable ctx :+: dom)) a, VarId)Source
Convert a syntax tree to a sharingpreserving graph
:: Syntactic a (HODomain ctx dom)  
=> (forall a. ASTF (HODomain ctx dom) a > Maybe (SatWit ctx a))  A function that decides whether a given node can be shared.

> a  
> IO (ASG ctx (Lambda ctx :+: (Variable ctx :+: dom)) (Internal a), VarId) 
Reifying an nary syntactic function to a sharingpreserving graph
This function is not referentially transparent (hence the IO
). However, it
is wellbehaved in the sense that the worst thing that could happen is that
sharing is lost. It is not possible to get false sharing.