definition module rule // $Id$ from graph import Graph,Node from StdOverloaded import ==,toString from StdFile import <<< // --- Exported types :: Rule sym var :: Rgraph sym var // --- Functions on rules // Build a rule from its constituents mkrule :: [.var] .var (Graph .sym .var) -> Rule .sym .var // The arguments of a rule, i.e. the roots of its lhs arguments :: !.(Rule sym var) -> [var] // The root of a rule, i.e. of its rhs ruleroot :: !.(Rule sym var) -> var // The graph part of a rule, i.e. its bindings rulegraph :: !.(Rule sym var) -> Graph sym var instance toString Rule sym var | toString sym & toString var & == var // --- Functions on rooted graphs // The empty rooted graph with a given root emptyrgraph :: .var -> Rgraph .sym .var // Update the contents of a variable in a rooted graph updatergraph :: var .(Node sym var) !.(Rgraph sym var) -> .Rgraph sym var // Prune a rooted graph at a variable (making it free) prunergraph :: var !.(Rgraph sym var) -> .Rgraph sym var // Get the root of a rooted graph rgraphroot :: !.(Rgraph sym var) -> var // Get the graph part of a rooted graph rgraphgraph :: !.(Rgraph sym var) -> Graph sym var // Build a rooted graph from a root and a graph mkrgraph :: .var (Graph .sym .var) -> Rgraph .sym .var instance == (Rgraph sym var) | == sym & == var instance toString (Rgraph sym var) | toString sym & toString var & == var instance <<< Rgraph sym var | toString sym & toString var & == var instance <<< Rule sym var | toString sym & toString,== var