add some strictness
This commit is contained in:
parent
1500c62e51
commit
b8412f8e52
2 changed files with 4 additions and 4 deletions
|
@ -10,6 +10,7 @@ maintainer: rhiannon morris <rhi@rhiannon.website>
|
|||
common deps
|
||||
default-language: Haskell2010
|
||||
default-extensions:
|
||||
BangPatterns,
|
||||
BlockArguments,
|
||||
DerivingStrategies,
|
||||
DuplicateRecordFields,
|
||||
|
|
|
@ -5,7 +5,6 @@ import IPS.Types
|
|||
import Data.Attoparsec.ByteString (Parser)
|
||||
import qualified Data.Attoparsec.ByteString as Parse
|
||||
import Data.Bits
|
||||
import Data.Bifunctor
|
||||
import qualified Data.ByteString as ByteString
|
||||
import Data.Functor
|
||||
import qualified Data.Vector.Generic as Vector
|
||||
|
@ -24,7 +23,7 @@ parseBody = uncurry Vector.fromListN <$> go where
|
|||
go = eof <|> chunk
|
||||
eof = Parse.string "EOF" $> (0, [])
|
||||
chunk = liftA2 cons parseChunk go
|
||||
where cons c = bimap (+ 1) (c :)
|
||||
where cons c (!n, cs) = (n + 1, c : cs)
|
||||
|
||||
parseChunk :: Parser Chunk
|
||||
parseChunk = do
|
||||
|
@ -45,7 +44,7 @@ parseWord24 = parseWordBE 3
|
|||
|
||||
parseWordBE :: (Integral a, Bits a) => Word -> Parser a
|
||||
parseWordBE = go 0 where
|
||||
go acc 0 = pure acc
|
||||
go acc i = do
|
||||
go !acc 0 = pure acc
|
||||
go !acc i = do
|
||||
b <- fromIntegral <$> Parse.anyWord8
|
||||
go ((acc `shiftL` 8) .|. b) (i - 1)
|
||||
|
|
Loading…
Reference in a new issue