Проблема в том, что вы не говорите ему анализировать последовательность 0xFF, 0x00, уже поздно, поэтому мы надеемся, что следующий ответчик добавит слова (возможно, это вам достаточно поможет), но здесь есть альтернатива parseMarker
и сопровождающие handleParseResult
:
parseMarker = do -- or call it "parsePotentialMarker"
part1 <- word8 0xFF
part2 <- anyWord8
return $
if (part2 /= 0)
then [(part1, part2)]
else []
-- ... skipping other functions...
handleParseResult result = do
case result of
Fail _ _ msg -> msg
Done _ r -> show (concat r)
-- ...
С другой стороны, в вопросах немного помогает иметь полностью функциональный тест в коде, что-то вроде:
main =
let contents = BS.pack [1,2,3,4,0xFF,1 {- marker 1 -},0xFF,0x00,0xFF,2 {- marker 2 -},31,13,0xFF,0x00]
in putStrLn $ parseJPEG contents