Подтвердить что ты не робот

Не удается прочитать целые числа, разделенные точками

При попытке прочитать список целых чисел, разделенных точками, я заметил странную вещь.

Prelude> (reads "123") :: [(Integer,String)]
[(123,"")]
Prelude> (reads "123.") :: [(Integer,String)]
[(123,".")]
Prelude> (reads "123.456") :: [(Integer,String)]
[]

Я понимаю, почему это происходит с точки зрения реализации (readNumber завершается успешно, а затем convert завершается сбой), и я понимаю, как использовать readDec для его преодоления.

Мой вопрос в том, является ли это поведение документированным где-то в отчете? Если да, то почему?

4b9b3361

Ответ 1

Не только это не документировано в отчете, оно, по-видимому, отклоняется от отчета.

Есть много мест, где по соображениям эффективности или иным образом стандартные библиотеки GHC отклоняются от эталонных реализаций в отчете. Но, если не будет тщательно отмечено, реализации должны соответствовать поведению.

Однако, если мы посмотрим на соответствующую часть отчета Haskell, мы видим

instance  Read Int  where  
  readsPrec p r = [(fromInteger i, t) | (i,t) <- readsPrec p r]  
        -- Reading at the Integer type avoids  
        -- possible difficulty with minInt

instance  Read Integer  where  
    readsPrec p         = readSigned readDec

Мы видим, что он использует другую реализацию, которая, как я думаю, не имеет такого поведения.

Итак, это то, что, безусловно, должно быть поднято в списке библиотек на сайте haskell.org.