{-# LANGUAGE UnicodeSyntax, FlexibleContexts #-}
module Rules where
import Prelude.Unicode
import Graph
import GraphRewriting
import GraphRewriting.Graph.Read
import GraphRewriting.Graph.Write
import GraphRewriting.Graph.Write.Unsafe as Unsafe
import Control.Monad (liftM, replicateM)
import Data.Maybe (catMaybes)
unshare ∷ (View [Port] n, View Vertex n) ⇒ Rule n
unshare = do
e ← edge
c ← liftReader $ edgeCardinality e
require (c > 2)
v ← nodeAt e
require (e ≡ inp v)
rewrite $ \[n] → do
es ← deleteEdge e
v' ← inspectNode n
mapM (copyNode n) [v {inp = i} | i ← es, i ≢ inp v']
deleteNode n
eraseRule ∷ (View [Port] n, View Vertex n) ⇒ Rule n
eraseRule = do
e ← edge
c ← liftReader $ edgeCardinality e
require (c ≡ 1)
nodeAt e ∷ View Vertex n ⇒ Pattern n Vertex
erase