[Haskell-cafe] annoying output

Philip Weaver philip.weaver at gmail.com
Sun Dec 9 01:48:33 EST 2007


Well, you're choosing to parse each digit of your integer as a separate
integer, so if you want to combine them after reading you'll need to
multiply by powers of two.  Or, you can just read in all the digits in one
'read' command, like this:

   parseInt :: String -> (Expr, String)
   parseInt xs = let (digits, rest) = span isDigit
                       in (EInt (read digits), rest)

where 'span' is defined in the Prelude.  Hope this helps!

- Phil

On Dec 8, 2007 10:03 PM, Ryan Bloor <ryanbloor at hotmail.com> wrote:

> hi
>
> The code below does almost what I want but not quite! It outputs...parseInt
> "12444a"         gives...
> [(EInt 1,"2444a"),(EInt 2,"444a"),(EInt 4,"44a"),(EInt 4,"4a"),(EInt
> 4,"a")]
>
> What I want is: [(EInt 12444, "a")]
>
> data Expr = EInt {vInt :: Int} -- integer values
>  | EBool {vBool :: Bool} -- boolean values
>
> parseInt :: Parser
> parseInt (x:xs)
>  | (isDigit x && xs /= []) = [(EInt (read [x]),xs)] ++ parseInt xs
>  | isDigit x && xs == [] = [(EInt (read [x]),[])]
>  | otherwise = []
>
> Thanks
>
> Ryan
>
>
>
>
>
> ------------------------------
> Get closer to the jungle. I'm a Celebrity Get Me Out Of Here!<http://entertainment.uk.msn.com/tv/realitytv/im-a-celebrity/>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20071208/25661407/attachment.htm


More information about the Haskell-Cafe mailing list