Actually writing a self-contained parser (in essence a function parse :: [Binary] -> AST) is one of the things where Haskell shines. You could use `attoparsec` (and to start off, even using the stdlib's https://hackage.haskell.org/package/parsers-0.12.11/docs/Tex... can get you very far).
And I say that as someone, whose top-rated comment in this thread is more or less a Haskell rant.