В GHCi, я типаHaskell Список Список Тип ошибки
let xs = [1, 'a']
сразу жалуется на ошибку:
<interactive>:28:11:
No instance for (Num Char) arising from the literal ‘1’
In the expression: 1
In the expression: [1, 'a']
In an equation for ‘xs’: xs = [1, 'a']
Однако, когда я типа
let xs = [1, [1, 1]]
Он только что прошел. И жалуется, когда я пытаюсь напечатать хз:
<interactive>:5:1:
No instance for (Num [t0]) arising from a use of ‘it’
In a stmt of an interactive GHCi command: print it
Я думаю, что Haskell является статическим языком типа поэтому любая ошибка типа должна быть поймана во время компиляции. Мне интересно, почему вышеупомянутые 2 ошибки пойманы в разное время?
Почему же одни и те же рассуждения применимы к потенциальному экземпляру «Num Char»? –
@ReidBarton Хороший вопрос! Я на самом деле не уверен в этом. Я бы предположил, что во время разрешения вопроса GHC отказывается отсрочить обнаружение доказательств мономорфных ограничений; но это всего лишь предположение. –
Вы можете определить экземпляр «Num Char» на основе экземпляра «Enum Char». Те же рассуждения применимы, но экземпляр просто не включен здесь. –