У меня есть набор бинарных записей, упакованных в файл, и я читаю их с помощью Data.ByteString.Lazy и Data.Binary.Get. С моей текущей реализацией файл 8 Мб занимает 6 секунд для разбора.
import qualified Data.ByteString.Lazy as BL
import Data.Binary.Get
data Trade = Trade { timestamp :: Int, price :: Int , qty :: Int } deriving (Show)
getTrades = do
empty <- isEmpty
if empty
then return []
else do
timestamp <- getWord32le
price <- getWord32le
qty <- getWord16le
rest <- getTrades
let trade = Trade (fromIntegral timestamp) (fromIntegral price) (fromIntegral qty)
return (trade : rest)
main :: IO()
main = do
input <- BL.readFile "trades.bin"
let trades = runGet getTrades input
print $ length trades
Что я могу сделать, чтобы сделать это быстрее?