Guest User

Untitled

a guest
Jul 19th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. readBin :: String -> Integer
  2. readBin [] = 0
  3. readBin str = (readBin $ init str) * 2 + (read [last str])
  4.  
  5. parseBinNumber :: Parser LispVal
  6. parseBinNumber = do char '#'
  7. char 'b'
  8. input <- many1 $ oneOf "01"
  9. return $ Number $ readBin input
  10.  
  11. parseOctNumber :: Parser LispVal
  12. parseOctNumber = do char '#'
  13. char 'o'
  14. input <- many1 $ oneOf "01234567"
  15. return $ Number $ fst $ head $ readOct input
  16.  
  17. parseDecNumber :: Parser LispVal
  18. parseDecNumber = do char '#'
  19. char 'd'
  20. input <- many1 digit
  21. return $ Number $ read input
  22.  
  23. parseHexNumber :: Parser LispVal
  24. parseHexNumber = do char '#'
  25. char 'x'
  26. input <- many1 $ oneOf "0123456789aAbBcCdDeEfF"
  27. return $ Number $ fst $ head $ readHex input
  28.  
  29. parseDefaultNumber :: Parser LispVal
  30. parseDefaultNumber = do input <- many1 digit
  31. return $ Number $ read input
  32.  
  33. parseNumber :: Parser LispVal
  34. parseNumber = parseBinNumber
  35. <|> parseOctNumber
  36. <|> parseDecNumber
  37. <|> parseHexNumber
  38. <|> parseDefaultNumber
Add Comment
Please, Sign In to add comment