@@ -26,7 +26,7 @@ data World = World
2626data Level = Level
2727 { levelStart :: (Int, Int)
2828 , levelEnd :: (Int, Int)
29− , levelGeo :: Array (Int, Int) LevelPiece
29+ , levelGeo :: Geo
3030 -- building the geo image is expensive. Cache it. Though VTY should go through greater lengths
3131 -- to avoid the need to cache images.
3232 , levelGeoImage :: Image
@@ -39,6 +39,7 @@ data LevelPiece
3939 deriving (Show, Eq)
4040
4141type Game = RWST Vty () World IO
42+type Geo = Array (Int, Int) LevelPiece
4243
4344main :: IO ()
4445main = do
@@ -65,8 +66,7 @@ mkLevel difficulty = do
6566 geo <- foldM (addRoom levelWidth levelHeight) baseGeo (start : end : centers)
6667 return $ Level start end geo (buildGeoImage geo)
6768
68−addRoom :: Int -> Int -> Array (Int, Int) LevelPiece -> (Int, Int)
69− -> IO (Array (Int, Int) LevelPiece)
69+addRoom :: Int -> Int -> Geo -> (Int, Int) -> IO Geo
7070addRoom levelWidth levelHeight geo (centerX, centerY) = do
7171 size <- randomRIO (5,15)
7272 let xMin = max 1 (centerX - size)
@@ -137,7 +137,7 @@ worldImages = do
137137 let dudeImage = translate (dudeX theDude) (dudeY theDude) (char pieceA '@')
138138 return [dudeImage, levelGeoImage theLevel]
139139
140−buildGeoImage :: Array (Int, Int) LevelPiece -> Image
140+buildGeoImage :: Geo -> Image
141141buildGeoImage geo =
142142 let (geoWidth, geoHeight) = snd $ bounds geo
143143 -- seems like a the repeated index operation should be removable. This is not performing random