diff options
Diffstat (limited to 'src/Grasp/Node.hs')
-rw-r--r-- | src/Grasp/Node.hs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/Grasp/Node.hs b/src/Grasp/Node.hs new file mode 100644 index 0000000..ce84163 --- /dev/null +++ b/src/Grasp/Node.hs @@ -0,0 +1,47 @@ +module Grasp.Node ( + GNode, + GNodeType, + + singleton, + uSingleton, + fromStringList, + lab, + inst, + idNo + ) where + + + +import Data.Graph.Inductive.Graph( LNode ) +import Data.Map( Map ) +import qualified Data.Map as Map + + + +type GNode = LNode (Maybe String, String) +type GNodeType = (Maybe String, String) + + + +singleton :: Int -> String -> String -> GNode +singleton i m s = (i,(Just m,s)) + +uSingleton :: Int -> String -> GNode +uSingleton i s = (i,(Nothing,s)) + +fromStringList :: Map String Int -> [(String,String)] -> [GNode] +fromStringList m ns = + let change x = case (Map.lookup x m) of + Just a -> a + Nothing -> error "Grasp.Node.fromStringList: no value for key " ++ x + in map (\(x,y) -> (change x, (Just x, y))) ns + +lab :: GNode -> Maybe String +lab (_,(x,_)) = x + +inst :: GNode -> String +inst (_,(_,x)) = x + +idNo :: GNode -> Int +idNo (x,(_,_)) = x + |