fix[parse]: Clones the result vector only once.

I removed a `force`, I noticed that `freeze` was already doing a clone.
This commit is contained in:
vegowotenks 2025-06-29 10:30:44 +02:00
parent f9fd24261a
commit 63f3b31dbb

View file

@ -3,7 +3,6 @@
{-# LANGUAGE LambdaCase #-}
module Language.Brainfuck (parse, ParseFailure, render) where
import Control.Monad ((<$!>))
import Control.Monad.ST (runST, ST)
import Data.Text ( Text )
@ -48,7 +47,7 @@ parse text = runST $ do
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
frozen <- Vector.freeze populatedSlice
pure . Right $ (frozen, Text.empty)
parseBlock t@(c Text.:< cs) instructions index = let
@ -65,7 +64,7 @@ parse text = runST $ do
'.' -> recognizeInstruction PutByte cs
']' -> do
let populatedSlice = MutableVector.take index instructions
frozen <- Vector.force <$!> Vector.freeze populatedSlice
frozen <- Vector.freeze populatedSlice
pure $ Right (frozen, t)
'[' -> do
innerVector <- MutableVector.new (Text.length cs)