[Haskell-cafe] Golfing parsec code
Jacek Generowicz
jacek.generowicz at cern.ch
Sat Oct 16 04:06:44 EDT 2010
I'm trying to write a utility which is able to read Ratios from two
distinct formats
"2 / 3" -> 2 % 3
"4" -> 4 % 1
I'm sure that a skilled Haskell programmer could vastly improve on my
code (do I even need Parsec?), so I've come to solicit advice.
import Text.ParserCombinators.Parsec
import qualified Text.ParserCombinators.Parsec.Token as P
import Text.Parsec.Language (haskellDef)
import Data.Ratio
readFraction :: String -> Either ParseError (Ratio Integer)
readFraction = parse ratio "-"
lexer = P.makeTokenParser haskellDef
integer = P.integer lexer
natural = P.natural lexer
whiteSpace = P.whiteSpace lexer
ratio = try frac <|> integer'
integer' = do
i <- integer
return $ fromInteger i
frac = do
whiteSpace
num <- natural
char '/'
den <- integer
return (num % den)
f = readFraction " 3 / 2 "
i = readFraction " 6 "
main = print [f,i]
More information about the Haskell-Cafe
mailing list