diff options
Diffstat (limited to 'src/Grasp/Monad.hs')
| -rw-r--r-- | src/Grasp/Monad.hs | 26 | 
1 files changed, 24 insertions, 2 deletions
| diff --git a/src/Grasp/Monad.hs b/src/Grasp/Monad.hs index b49b53d..e58aa74 100644 --- a/src/Grasp/Monad.hs +++ b/src/Grasp/Monad.hs @@ -13,7 +13,9 @@ module Grasp.Monad (      peekIP,      nextIP, -    nodesOut +    nodesOut, +    reLabel, +    insEdge      ) where @@ -39,7 +41,7 @@ import qualified Data.List as List  import Data.Map( Map )  import qualified Data.Map as Map -import Grasp.Graph( Node, LNode, LEdge, Gr ) +import Grasp.Graph( Node, LNode, LEdge, Gr, (&) )  import qualified Grasp.Graph as Graph  import Grasp.Types.IP( IP ) @@ -309,3 +311,23 @@ nodesOut s n = do      if (Maybe.isNothing curNode) then return [] else return result + + +reLabel :: Instruction -> GNode -> GraspM () +reLabel i n = do +    (gr, ips, fh) <- State.get + +    let (mc, d) = Graph.match (GN.toNode n) gr +        c = Maybe.fromJust mc +        c' = (\(w,x,y,z) -> (w,x,i,z)) $ c + +    Monad.when (Maybe.isJust mc) (State.put ((c' & d) ,ips, fh)) + + + +insEdge :: GEdge -> GraspM () +insEdge e = do +    (gr, ips, fh) <- State.get +    let gr' = Graph.insEdge (GE.toLEdge e) gr +    State.put (gr', ips, fh) + | 
