fix: function naming
This commit is contained in:
parent
a94455f365
commit
f9fd24261a
1 changed files with 29 additions and 26 deletions
|
@ -30,7 +30,7 @@ parse :: Text -> Either ParseFailure (Vector Instruction)
|
|||
parse text = runST $ do
|
||||
collectorVector <- MutableVector.new (Text.length text)
|
||||
|
||||
result <- go text collectorVector 0
|
||||
result <- parseBlock text collectorVector 0
|
||||
|
||||
pure $ case result of
|
||||
|
||||
|
@ -42,16 +42,19 @@ parse text = runST $ do
|
|||
|
||||
where
|
||||
|
||||
go :: Text -> MVector s Instruction -> Int -> ST s (Either ParseFailure (Vector Instruction, Text))
|
||||
go Text.Empty instructions index = do
|
||||
-- | Parses the supplied text until the next closing bracket., the closing bracket will be returned in the rest.
|
||||
--
|
||||
-- Assumes the vector has enough space to hold all the instructions. Assumes all elements until the Int index have already been initialized.
|
||||
parseBlock :: Text -> MVector s Instruction -> Int -> ST s (Either ParseFailure (Vector Instruction, Text))
|
||||
parseBlock Text.Empty instructions index = do
|
||||
let populatedSlice = MutableVector.take index instructions
|
||||
frozen <- Vector.force <$!> Vector.freeze populatedSlice
|
||||
pure . Right $ (frozen, Text.empty)
|
||||
go t@(c Text.:< cs) instructions index = let
|
||||
parseBlock t@(c Text.:< cs) instructions index = let
|
||||
|
||||
recognizeInstruction i cont = do
|
||||
MutableVector.write instructions index i
|
||||
go cont instructions (succ index)
|
||||
parseBlock cont instructions (succ index)
|
||||
|
||||
in case c of
|
||||
'+' -> recognizeInstruction Increment cs
|
||||
|
@ -66,12 +69,12 @@ parse text = runST $ do
|
|||
pure $ Right (frozen, t)
|
||||
'[' -> do
|
||||
innerVector <- MutableVector.new (Text.length cs)
|
||||
innerResult <- go cs innerVector 0
|
||||
innerResult <- parseBlock cs innerVector 0
|
||||
case innerResult of
|
||||
Right (body, ']' Text.:< rest) -> recognizeInstruction (Loop body) rest
|
||||
Right _ -> pure $ Left (UnmatchedOpenBracket . fromIntegral $ Text.length text - Text.length t)
|
||||
_ -> pure innerResult
|
||||
_ -> go cs instructions index
|
||||
_ -> parseBlock cs instructions index
|
||||
|
||||
|
||||
-- >>> parse $ Text.pack "<<>>,,..<,.>"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue