
On Fri, Sep 23, 2011 at 8:04 PM, Michael Craig
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.
If it's easy enough to write inline, might as well do so. And it's fun with Applicative :) hex2 = (+) <$> ((*16) <$> higit) <*> higit higit = subtract (fromEnum '0') <$> satisfy isHexDigit color = Color <$> hex2 <*> hex2 <*> hex2