Skip to content

Instantly share code, notes, and snippets.

@kaini
Created January 2, 2011 16:13
Show Gist options
  • Save kaini/762616 to your computer and use it in GitHub Desktop.
Save kaini/762616 to your computer and use it in GitHub Desktop.
readBin :: String -> Integer
readBin [] = 0
readBin str = (readBin $ init str) * 2 + (read [last str])
parseBinNumber :: Parser LispVal
parseBinNumber = do char '#'
char 'b'
input <- many1 $ oneOf "01"
return $ Number $ readBin input
parseOctNumber :: Parser LispVal
parseOctNumber = do char '#'
char 'o'
input <- many1 $ oneOf "01234567"
return $ Number $ fst $ head $ readOct input
parseDecNumber :: Parser LispVal
parseDecNumber = do char '#'
char 'd'
input <- many1 digit
return $ Number $ read input
parseHexNumber :: Parser LispVal
parseHexNumber = do char '#'
char 'x'
input <- many1 $ oneOf "0123456789aAbBcCdDeEfF"
return $ Number $ fst $ head $ readHex input
parseDefaultNumber :: Parser LispVal
parseDefaultNumber = do input <- many1 digit
return $ Number $ read input
parseNumber :: Parser LispVal
parseNumber = parseBinNumber
<|> parseOctNumber
<|> parseDecNumber
<|> parseHexNumber
<|> parseDefaultNumber
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment