X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=advent15%2FMain.hs;h=40a152a188969791c03f5dbc986ccc495b8b984f;hb=e2b15781f674220586e860fb9a85b6ad0f278fad;hp=758bdc6efc026c0428b800262dd6fae8cf437d5d;hpb=c42805c934d8b0300b8c4d9ba10b1162585b31b7;p=advent-of-code-21.git

diff --git a/advent15/Main.hs b/advent15/Main.hs
index 758bdc6..40a152a 100644
--- a/advent15/Main.hs
+++ b/advent15/Main.hs
@@ -35,7 +35,6 @@ makeLenses ''Cave
 
 type CaveContext = Reader Cave
 
-
 data Agendum s = 
     Agendum { _current :: s
             , _trail :: Q.Seq s
@@ -50,9 +49,9 @@ type ExploredStates s = S.Set s
 
 class (Eq s, Ord s, Show s) => SearchState s where
     unwrapPos :: s -> BasePosition
+    emptySearchState :: s
     successors :: s -> CaveContext (Q.Seq s)
     estimateCost :: s -> CaveContext Int
-    emptySearchState :: s
     isGoal :: s -> CaveContext Bool
     entryCost :: s -> CaveContext Int
 
@@ -64,37 +63,37 @@ instance SearchState Position where
   emptySearchState = Position (V2 0 0)
 
   -- successors :: Position -> CaveContext (Q.Seq Position)
-  successors here = 
+  successors (Position here) = 
     do grid <- asks _grid
        let neighbours = 
             filter (inRange (bounds grid))  
-              [ (unwrapPos here) ^+^ delta
+              [ here ^+^ delta
               | delta <- [V2 -1 0, V2 1 0, V2 0 -1, V2 0 1]
               ]
        let succs = Q.fromList $ map Position neighbours
        return succs
 
   -- estimateCost :: Position -> CaveContext Int
-  estimateCost here = 
+  estimateCost (Position here) = 
     do goal <- asks _goal
-       let (V2 dr dc) = (unwrapPos here) ^-^ goal
+       let (V2 dr dc) = here ^-^ goal
        return $ (abs dr) + (abs dc)
 
   -- isGoal :: here -> CaveContext Bool
-  isGoal here = 
+  isGoal (Position here) = 
     do goal <- asks _goal
-       return $ (unwrapPos here) == goal
+       return $ here == goal
 
-  entryCost here = 
+  entryCost (Position here) = 
     do grid <- asks _grid
-       return $ grid ! (unwrapPos here)
+       return $ grid ! here
 
 instance SearchState TiledPosition where
 
-  emptySearchState = TiledPosition (V2 0 0)
-
   unwrapPos (TiledPosition p) = p
 
+  emptySearchState = TiledPosition (V2 0 0)
+
   -- successors :: Position -> CaveContext (Q.Seq Position)
   successors (TiledPosition here) = 
     do grid <- asks _grid