From 63f3b31dbb99c7c60e00e8526b6a2fda28803e36 Mon Sep 17 00:00:00 2001 From: VegOwOtenks Date: Sun, 29 Jun 2025 10:30:44 +0200 Subject: [PATCH] fix[parse]: Clones the result vector only once. I removed a `force`, I noticed that `freeze` was already doing a clone. --- src/Language/Brainfuck.hs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Language/Brainfuck.hs b/src/Language/Brainfuck.hs index 0681be7..b188ba6 100644 --- a/src/Language/Brainfuck.hs +++ b/src/Language/Brainfuck.hs @@ -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)