Suppose we want to parse a 24-bit hex color value:

input :: ByteString
input = "af093c blah blah blah"

type Color = (Word8, Word8, Word8)


Attoparsec.Char8 exports a nice hexadecimal parser, but it consumes all available hex-flavored input. I'd like to make it consume exactly two bytes, so I could write my color parser like this:


color :: Parser Color
color = do
    r <- hex2
    g <- hex2
    b <- hex2
    return $ Color (r, g, b)

hex2 :: Parser Word8
hex2 = ???


So my question is "how do I write hex2?" I could easily rewrite hexadecimal, but it would be nicer to reuse its hex-handling logic.

Best,
Mike S Craig
(908) 328 8030