summaryrefslogtreecommitdiff
path: root/src/Grasp/Interpreter.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Grasp/Interpreter.hs')
-rw-r--r--src/Grasp/Interpreter.hs17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/Grasp/Interpreter.hs b/src/Grasp/Interpreter.hs
index 0d24ce1..bca167a 100644
--- a/src/Grasp/Interpreter.hs
+++ b/src/Grasp/Interpreter.hs
@@ -112,7 +112,22 @@ newI = do
delI :: GraspM ()
-delI = GMonad.updateIP
+delI = do
+ curNode <- GMonad.peekIP >>= return . Maybe.fromJust
+
+ tailNodes <- GMonad.nodesOut (EL.mk "tail") curNode
+ headNodes <- GMonad.nodesOut (EL.mk "head") curNode
+ labelNodes <- GMonad.nodesOut (EL.mk "label") curNode
+
+ Monad.when (length tailNodes /= 0) (do
+ input <- mapM GMonad.edgesOut tailNodes >>= return . concat
+ let labels = map (EL.mk . IN.toString . GN.toInst) labelNodes
+ heads = map GN.toNode headNodes
+ result = filter (\x -> (length headNodes == 0 || GE.toDest x `elem` heads) &&
+ (length labelNodes == 0 || GE.toLabel x `elem` labels)) input
+ GMonad.delEdges result )
+
+ GMonad.updateIP