Я прохожу Write Yourself a Scheme in Haskell. Это отличный учебник, но я столкнулся с проблемой в одном из упражнений синтаксический разбор:
parseNumber :: Parser LispVal
parseNumber = liftM (Number . read) $ many1 digit
Перепишите parseNumber, используя:
У меня не было проблем с do-notation:
parseNumber :: Parser LispVal
parseNumber = do x <- many1 digit
let y = read x
return $ Number y
Для #2 я пробовал кучу вариаций, таких как:
parseNumber :: Parser LispVal
parseNumber = (many1 digit) >>= (liftM (Number . read))
но я продолжаю сталкиваться с ошибками типа. У меня два вопроса.
Мне кажется, что я упускаю фундаментальную концепцию относительно типов?