Я новичок в haskell и, читая о типах, заметил следующее и не смог понять причину этого. Если я определю следующие значения в скрипте
x = 2
y = x + 3
И теперь я проверяю их тип, я получаю следующее
*Chapter4> :t x
x :: Integer
*Chapter4> :t y
y :: Integer
Если я изменю определение y с y = x + 3
на y = x + 3.1
и снова проверяю тип, я получаю это
*Chapter4> :t y
y :: Double
*Chapter4> :t x
x :: Double
Но если вместо этого я определяю переменные x и y, используя let
в GHCi, следующим образом:
*Chapter4> let x = 2
*Chapter4> let y = x + 3
Теперь я проверяю типы и получаю следующее:
*Chapter4> :t x
x :: Num p => p
*Chapter4> :t y
y :: Num a => a
И теперь я снова меняю определение y на y = x + 3.1
и проверяю тип, я получаю следующее:
*Chapter4> :t x
x :: Num p => p
*Chapter4> :t y
y :: Fractional a => a
Так почему эта разница в поведении? Это как-то связано с let?