From a81d622125ba067583e1f81bba656d3889f14822 Mon Sep 17 00:00:00 2001 From: George Thomas Date: Wed, 3 Dec 2025 17:52:23 +0000 Subject: [PATCH] Refactor day 1 to make more use of state monad --- haskell/Puzzles/Day1.hs | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/haskell/Puzzles/Day1.hs b/haskell/Puzzles/Day1.hs index e79b886..49b1dd0 100644 --- a/haskell/Puzzles/Day1.hs +++ b/haskell/Puzzles/Day1.hs @@ -18,22 +18,24 @@ puzzle = [ T.show . sum . flip evalState 50 - . traverse \(d, i) -> state \p -> - let (_, p') = step i d p - in (Count if p' == 0 then 1 else 0, p') + . traverse \(d, i) -> do + modify $ snd . step i d + p' <- get + pure $ Count if p' == 0 then 1 else 0 , T.show . sum . flip evalState 50 - . traverse \(d, i) -> state \p -> - let (c, p') = step i d p - c' = case d of - R -> abs c - L -> - if - | p == 0 -> abs c - 1 - | p' == 0 -> abs c + 1 - | otherwise -> abs c - in (c', p') + . traverse \(d, i) -> do + p <- get + c <- state $ step i d + p' <- get + pure case d of + R -> abs c + L -> + if + | p == 0 -> abs c - 1 + | p' == 0 -> abs c + 1 + | otherwise -> abs c ] }