diff options
Diffstat (limited to 'src/Grasp/Types.hs')
-rw-r--r-- | src/Grasp/Types.hs | 65 |
1 files changed, 23 insertions, 42 deletions
diff --git a/src/Grasp/Types.hs b/src/Grasp/Types.hs index af43d51..860e5ef 100644 --- a/src/Grasp/Types.hs +++ b/src/Grasp/Types.hs @@ -1,67 +1,48 @@ module Grasp.Types ( - GraspProgram(..), - - namedNodes, - nodesWithName, - normalise, - iso + Instruction, + EdgeLabel, + GNode, + GEdge ) where -import Data.Graph.Inductive.Graph( Node, LNode, LEdge, (&) ) -import qualified Data.Graph.Inductive.Graph as Graph -import Data.Graph.Inductive.Tree -import Data.List -import Data.Maybe -import qualified Data.Map as Map - - - - -type GraspProgram = Gr String String - -instance (Ord a, Ord b) => Eq (Gr a b) where - a == b = ((sort . Graph.labNodes $ a) == (sort . Graph.labNodes $ b)) && - ((sort . Graph.labEdges $ a) == (sort . Graph.labEdges $ b)) +import Grasp.Graph( Node, LNode, LEdge ) -namedNodes :: GraspProgram -> [LNode String] -namedNodes g = - let nodes = Graph.labNodes g - edges = Graph.labEdges g +newtype Instruction = Instruction String + deriving (Eq, Show) - nameEdges = filter (\(_,_,z) -> z == "name") edges - nameNodes = map (\(x,_,_) -> x) nameEdges +newtype EdgeLabel = EdgeLabel String + deriving (Eq, Show) - in filter (\(x,_) -> x `elem` nameNodes) nodes +newtype GNode = GNode (LNode Instruction) + deriving (Eq, Show) +newtype GEdge = GEdge (LEdge EdgeLabel) + deriving (Eq, Show) -nodesWithName :: GraspProgram -> String -> [LNode String] -nodesWithName g s = - let nodes = Graph.labNodes g - edges = Graph.labEdges g - nodeLabelMap = Map.fromList nodes - nameEdges = filter (\(_,_,z) -> z == "name") edges - specific = filter (\(_,y,_) -> fromJust (Map.lookup y nodeLabelMap) == s) nameEdges - nameNodes = map (\(x,_,_) -> x) specific +gnode :: GNode -> Node +gnode (GNode a) = fst a - in filter (\(x,_) -> x `elem` nameNodes) nodes +gninst :: GNode -> Instruction +gninst (GNode a) = snd a --- to-do -normalise :: GraspProgram -> GraspProgram -normalise g = Graph.mkGraph [] [] +gefrom :: GEdge -> Node +gefrom (GEdge (a,_,_)) = a +geto :: GEdge -> Node +geto (GEdge (_,b,_)) = b -iso :: GraspProgram -> GraspProgram -> Bool -iso a b = (normalise a) == (normalise b) +gelabel :: GEdge -> EdgeLabel +gelabel (GEdge (_,_,c)) = c |