-- John Garvin -- CS 429 Final Project -- March 28, 2001 module Model where import Picture import SOEGraphics hiding (Region) import Animation worldStep :: (a -> [a] -> [a]) -> [a] -> [a] worldStep stepFun ps = concat $ map (\p -> stepFun p ps) ps drawGroup :: (a -> Region) -> [a] -> Picture drawGroup drawFn ps = let dot = (Shape $ Ellipse 0.05 0.05) in Region Green $ foldr1 Union $ map drawFn ps iter :: (a -> [a] -> [a]) -> [a] -> [[a]] iter stepFun init = iterate (worldStep stepFun) init ws :: Int ws = 600 -- window size tick :: Maybe Time tick = Just 30 model :: (a -> Region) -> (a -> [a] -> [a]) -> [a] -> IO () model drawFn stepFn init = let pics = map (drawGroup drawFn) (iter stepFn init) loop w (p:ps) = setGraphic w (picToGraphic p) >> getWindowTick w >> loop w ps in runGraphics $ (do w <- openWindowEx "IPS test" Nothing (Just (ws,ws)) drawBufferedGraphic (Just 30) -- tick -- Strange bug: when I use "tick", it generates a type error: -- it says "Maybe Time" does not match "Maybe Time". Very strange. loop w pics closeWindow w)