kb 21.11.2012 06:46

Как-то я не понимаю, как я должен был догадаться о чем ошибка в подобном примере (показан тип, затем правильный пример, затем неправильный).

Prelude> :t ([3,4,5] >>=)
([3,4,5] >>=) :: Num a => (a → [b]) → [b]
Prelude> [3,4,5] >>= \x → [x,-x]
[3,-3,4,-4,5,-5]
Prelude> [3,4,5] >>= \x → x

<interactive>:15:2:
No instance for (Num [b0])
arising from the literal `3'
Possible fix: add an instance declaration for (Num [b0])
In the expression: 3
In the first argument of `(>>=)', namely `[3, 4, 5]'
In the expression: [3, 4, 5] >>= \ x → x

1. ak3n 21.11.2012 06:52

Контекста не хватает.

2. kbak3n /1 21.11.2012 10:38

чё?

3. 238328kb /2 21.11.2012 11:52

без поллитры не разобраться грит

4. kb238328 /3 21.11.2012 11:53

я к тому, что в последнее время (последствие той копипасты ошибки компиляции на 100страниц от дедфуда) понимаю, что чем продвинутее статическая типизация, тем сложнее её отладка. в данном случае контекста вообще никакого нет, это из книжки (которую @ak3n говорил, что дочитал :)

5. kbkb /4 21.11.2012 11:54

ну и х-ль был моей последней надеждой (пока еще остаётся) на вменяемость ошибок компиляции, но вот подобное как-то не понимаю (то ли я неправильно читаю, то ли х-ль еще не настолько умён)

6. 238328kb /4 21.11.2012 15:19 39723954551353497972742669

норм блог

7. ak3nkb /2 22.11.2012 01:44

Не мне, а компилятору не хватает. Операция связывания (>>=) принимает монадическое значение (с контекстом) передает обычной функции и возвращает опять монадическое. А ты возвращаешь просто x. Значение без контекста. То есть [x] — норм, т.к. листы тоже монады.

8. ak3nkb /4 22.11.2012 03:19

А мне наоборот иногда в питоне не хватает типов после джавы.

9. kbak3n /7 22.11.2012 10:10

Ну я-то это понимаю. Но вопрос, как человеку нормальному это понять? То есть, я чувствую, что из типа можно увидеть и дать нормальную (по моему мнению) ошибку компиляции, вида "ты возвращаешь тип X, а нужно тип [X]", а оно какое-то говно выводит (и ошибку вообще не в том месте показывает). Понимаешь?

10. ak3nkb /9 22.11.2012 11:35

Ну он и говорит: не определен instance для типа Num.

Do you really want to delete ?