Size: a a a

2016 March 18

Н

Нурлан in Haskell
Я так полагаю, что словарь методов должен создаваться при создании классов в обязательном порядке, в виде сигнатур функций. Когда же я закрепляю новый тип за определенным классом, разве я не должен определить как на новом типе действуют функции класса. Я все к тому, что эти определения должны быть где-то записаны. Разве это не в этот словарь идёт?
источник

Н

Нурлан in Haskell
Или я не догнал что за словарь такой. Извиняйте за глупые вопросы. Буду курить GADT😀
источник
2016 March 19

VZ

Vladislav Zavialov in Haskell
Ну правильно
источник

VZ

Vladislav Zavialov in Haskell
Реализация Eq для Integer например хранится в словарике EqDict Integer (если следовать примеру выше)
источник

VZ

Vladislav Zavialov in Haskell
Когда ты пишешь f :: Eq a => ..., то в функцию f добавляется неявный аргумент -- словарик EqDict
источник

Н

Нурлан in Haskell
Vladislav Zavialov
Когда ты пишешь f :: Eq a => ..., то в функцию f добавляется неявный аргумент -- словарик EqDict
Хочешь сказать он копируется в "объявление" функции?
источник

VZ

Vladislav Zavialov in Haskell
Что?
источник

Н

Нурлан in Haskell
А что происходит когда объявляется `inctance (Num a) => ....` ?
источник

Н

Нурлан in Haskell
Словарь копируется в функцию
источник

VZ

Vladislav Zavialov in Haskell
Ну он передается в нее при вызове, как любой другой аргумент.
источник

VZ

Vladislav Zavialov in Haskell
А когда ты пишешь instance (Num a) => ..., то вместо словарика создается функция, генерирующая словарик на основе другого
источник

VZ

Vladislav Zavialov in Haskell
По факту, тайпклассы - это словари + неявность + глобальность
источник

VZ

Vladislav Zavialov in Haskell
Можно их вручную реализовать, просто кода придется побольше писать: http://www.haskellforall.com/2012/05/scrap-your-type-classes.html
источник

VZ

Vladislav Zavialov in Haskell
Ну и GHC хорошо оптимизирует такой код, так что если инстанс известен во время компиляции, то скорее всего он будет заинлайнен и передаваться никуда не будет.
источник

Н

Нурлан in Haskell
Я математик, не программист, поэтому моя мала мала тупить. Что значит заинлайнен?
источник

Е

Ефрейтор Флибыч⚠️ in Haskell
Нурлан
Я математик, не программист, поэтому моя мала мала тупить. Что значит заинлайнен?
Скорее всего это значит, что он станет встроенной функцией.
источник

Н

Нурлан in Haskell
😳 в чем тогда отличие внутренней функции от записи словаря?
источник

Н

Нурлан in Haskell
Аргх, ладно надо читать документацию. Спасибо :)
источник

Е

Ефрейтор Флибыч⚠️ in Haskell
Ну он же там написал, что передаваться никуда не будет.
А вообще, я дно, не слушай меня. :D
источник

Н

Нурлан in Haskell
Ммм, кажется догнал
источник