From d3a9803cf89ea94975934dd8abb18bbc12408a7e Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Sat, 6 Dec 2014 00:32:49 +1100 Subject: All newtype stubs now in their own files in their own subdir --- src/Grasp/Monad.hs | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) (limited to 'src/Grasp/Monad.hs') diff --git a/src/Grasp/Monad.hs b/src/Grasp/Monad.hs index 9b0d65a..d8ffff8 100644 --- a/src/Grasp/Monad.hs +++ b/src/Grasp/Monad.hs @@ -18,6 +18,7 @@ module Grasp.Monad ( + import System.IO( Handle, FilePath, IOMode ) import qualified System.IO as IO @@ -40,14 +41,20 @@ import qualified Data.Map as Map import Grasp.Graph( Node, LNode, LEdge, Gr ) import qualified Grasp.Graph as Graph -import Grasp.IP( IP ) -import qualified Grasp.IP as IP +import Grasp.Types.IP( IP ) +import qualified Grasp.Types.IP as IP + +import Grasp.Types.GNode( GNode ) +import qualified Grasp.Types.GNode as GN -import Grasp.GNode( GNode, Instruction ) -import qualified Grasp.GNode as GN +import Grasp.Types.GEdge( GEdge ) +import qualified Grasp.Types.GEdge as GE -import Grasp.GEdge( GEdge, EdgeLabel ) -import qualified Grasp.GEdge as GE +import Grasp.Types.Instruction( Instruction ) +import qualified Grasp.Types.Instruction as IN + +import Grasp.Types.EdgeLabel( EdgeLabel ) +import qualified Grasp.Types.EdgeLabel as EL @@ -56,6 +63,7 @@ type GraspM a = StateT GraspProgram IO a + data GraspProgram = GraspProgram { programGraph :: Gr Instruction EdgeLabel , instPtrs :: [IP] , fileHandles :: Map FilePath Handle } @@ -86,7 +94,7 @@ finalise s = do (mapM_ IO.hClose) . Map.elems . fileHandles $ p let gr = programGraph p (nodes, edges) = (Graph.labNodes gr, Graph.labEdges gr) - return (map GN.mkGNode nodes, map GE.mkGEdge edges) + return (map GN.mk nodes, map GE.mk edges) @@ -113,14 +121,14 @@ multiNames ns es = numericName :: [GNode] -> [GEdge] -> Bool numericName ns es = let names = map snd (nameNodeList ns es) - in any (\x -> Maybe.isJust (GN.instToFloat (GN.toInst x))) names + in any (\x -> Maybe.isJust (IN.toFloat (GN.toInst x))) names noMain :: [GNode] -> [GEdge] -> Bool noMain ns es = let names = map snd (nameNodeList ns es) - mains = filter ((== (GN.mkInst "grasp:main")) . GN.toInst) names + mains = filter ((== (IN.mk "grasp:main")) . GN.toInst) names in length mains /= 0 @@ -172,7 +180,7 @@ getReadHandle path = do -- fix this later so it doesn't required unconnected edge checking first nameNodeList :: [GNode] -> [GEdge] -> [(GNode,GNode)] nameNodeList ns es = - let nameEdges = filter ((== (GE.mkLabel "name")) . GE.toLabel) es + let nameEdges = filter ((== (EL.mk "name")) . GE.toLabel) es findNode n = Maybe.fromJust (List.find ((== n) . GN.toNode) ns) in map (\x -> (findNode (GE.toSrc x), findNode (GE.toDest x))) nameEdges @@ -180,7 +188,7 @@ nameNodeList ns es = nodesWithName :: [GNode] -> [GEdge] -> String -> [GNode] nodesWithName ns es name = - (map fst) . (filter (\x -> (GN.toInst . snd $ x) == (GN.mkInst name))) $ (nameNodeList ns es) + (map fst) . (filter (\x -> (GN.toInst . snd $ x) == (IN.mk name))) $ (nameNodeList ns es) @@ -189,7 +197,7 @@ updateIP = do program <- State.get curNode <- peekIP Monad.when (Maybe.isJust curNode) (do - nexts <- nodesOut (GE.mkLabel "next") (Maybe.fromJust curNode) + nexts <- nodesOut (EL.mk "next") (Maybe.fromJust curNode) r <- liftIO (Random.getStdRandom (Random.randomR (0, length nexts - 1))) let ips = instPtrs program @@ -247,7 +255,7 @@ nodesOut s n = do let gr = programGraph program nout = Graph.lsuc gr (GN.toNode (Maybe.fromJust curNode)) filtered = filter ((== s) . snd) nout - result = map (\(x,y) -> GN.mkGNode (x, Maybe.fromJust (Graph.lab gr x))) filtered + result = map (\(x,y) -> GN.mk (x, Maybe.fromJust (Graph.lab gr x))) filtered if (Maybe.isNothing curNode) then return [] else return result -- cgit