Evan Laforge wrote:
>> hex2 = (+)<$> ((*16)<$> higit)<*> higit
>> higit = subtract (fromEnum '0')<$> satisfy isHexDigit
>> color = Color<$> hex2<*> hex2<*> hex2
Twan van Laarhoven wrote:
> How is "subtract (fromEnum '0')" supposed to convert a hex digit to an Int
> or Word8? I think you nee
On 24/09/11 05:21, Evan Laforge wrote:
hex2 = (+)<$> ((*16)<$> higit)<*> higit
higit = subtract (fromEnum '0')<$> satisfy isHexDigit
color = Color<$> hex2<*> hex2<*> hex2
How is "subtract (fromEnum '0')" supposed to convert a hex digit to an
Int or Word8? I think you need digitToInt (or
> So the question remains: is there a way to limit a parser to a finite chunk
> of input? Perhaps a way to run the 'take n' parser on the input and then run
> another parser on its result? This smells like monadic behavior, but of
> course with different semantics than the Monad instance for Parser
I agree on all counts! The hex-handling logic here is so straightforward
that it's hardly worth bothering with. In fact, my application's code as it
stands looks very similar to what you wrote. I'm really asking because I
want to be more "fluent" in attoparsec.
So the question remains: is there a
BTW you probably want 'data Color = Color !Word8 !Word8 !Word8'
On Fri, Sep 23, 2011 at 8:21 PM, Evan Laforge wrote:
> On Fri, Sep 23, 2011 at 8:04 PM, Michael Craig wrote:
>> Suppose we want to parse a 24-bit hex color value:
>> input :: ByteString
>> input = "af093c blah blah blah"
>> type Col
On Fri, Sep 23, 2011 at 8:04 PM, Michael Craig wrote:
> 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-flavor
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 cou