Вы, вероятно, включили -XOverloadedStrings
(или включили его с {-# LANGUAGE OverloadedStrings #-}
в верхней части файла).
В результате это означает, что строка литералы (не строковые переменные, только литералы), может интерпретироваться любым типом IsString
.
Text
является типом IsString
.Таким образом, это означает, что вы неявно используете pack
вокруг строки литералы (опять-таки литералы, а не обычные переменные).
Подобное происходит с числовыми литералами: числовой литерал может быть любым Num
тип.Исходя из того, какие функции вы вызываете для числового литерала, Haskell может получить точный тип и, таким образом, соответствующим образом «интерпретировать» литерал.Например, если вы пишете atan2 1 2
, то 1
и 2
должны интерпретироваться как RealFloat
типы, тогда как для quot 1 2
, 1
и 2
интерпретируются как типы Ìntegral`.