Refactor to use existential
This commit is contained in:
parent
b19c02811e
commit
ce3e586e0c
@ -28,7 +28,7 @@ main =
|
|||||||
, puzzleTest puzzle2
|
, puzzleTest puzzle2
|
||||||
]
|
]
|
||||||
|
|
||||||
puzzleTest :: Puzzle a -> TestTree
|
puzzleTest :: Puzzle -> TestTree
|
||||||
puzzleTest Puzzle{number, parser, parts} =
|
puzzleTest Puzzle{number, parser, parts} =
|
||||||
testGroup pt $
|
testGroup pt $
|
||||||
["examples", "real"] <&> \t ->
|
["examples", "real"] <&> \t ->
|
||||||
@ -43,13 +43,13 @@ puzzleTest Puzzle{number, parser, parts} =
|
|||||||
either (fail . ("parse failure: " <>) . errorBundlePretty) pure . runParser (parser <* eof) fp
|
either (fail . ("parse failure: " <>) . errorBundlePretty) pure . runParser (parser <* eof) fp
|
||||||
=<< T.readFile fp
|
=<< T.readFile fp
|
||||||
|
|
||||||
data Puzzle input = Puzzle
|
data Puzzle = forall input. Puzzle
|
||||||
{ number :: Word
|
{ number :: Word
|
||||||
, parser :: Parsec Void Text input
|
, parser :: Parsec Void Text input
|
||||||
, parts :: [input -> Text]
|
, parts :: [input -> Text]
|
||||||
}
|
}
|
||||||
|
|
||||||
puzzle1 :: Puzzle [(Direction, Inc)]
|
puzzle1 :: Puzzle
|
||||||
puzzle1 =
|
puzzle1 =
|
||||||
Puzzle
|
Puzzle
|
||||||
{ number = 1
|
{ number = 1
|
||||||
@ -94,7 +94,7 @@ step (Inc i) d (Pos p) = bimap Count Pos case d of
|
|||||||
L -> (p - i) `divMod` 100
|
L -> (p - i) `divMod` 100
|
||||||
R -> (p + i) `divMod` 100
|
R -> (p + i) `divMod` 100
|
||||||
|
|
||||||
puzzle2 :: Puzzle [(ID, ID)]
|
puzzle2 :: Puzzle
|
||||||
puzzle2 =
|
puzzle2 =
|
||||||
Puzzle
|
Puzzle
|
||||||
{ number = 2
|
{ number = 2
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user