packages feed

graph-rewriting-trs-0.1: Rules.hs

{-# 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