scala type classes, twittered
Jun. 27th, 2014 10:07 pm- what are they?
Classes of types, not formally declared as classes, as they usually do in Java/Scala.
- why?
To provide common, context-based ad-hoc operations, not provided by the types (since we don't want to). E.g. you have a traditional Java array, and you want it to be smarter.
- where do I declare additional operations?
Declare a parameterized trait e.g.
- where do I define additional operations?
In an implicit witness object implementing the trait.
- how do I use it?
(Using pimp pattern) define an implicit function that takes an instance of
- how come the right functionality is involved?
Compiler finds the right witness object based on the parameter type. Make sure there's exactly one visible for your type.
==========
P.S. correct me if I am wrong.
Classes of types, not formally declared as classes, as they usually do in Java/Scala.
- why?
To provide common, context-based ad-hoc operations, not provided by the types (since we don't want to). E.g. you have a traditional Java array, and you want it to be smarter.
- where do I declare additional operations?
Declare a parameterized trait e.g.
NewOps[T]
that describes the type class with functionality applicable to T
.- where do I define additional operations?
In an implicit witness object implementing the trait.
- how do I use it?
(Using pimp pattern) define an implicit function that takes an instance of
T
returning an instance having additional operations. Define a witness in this function implicitly - compiler will find it. Call witness object to do the job inside this new instance.- how come the right functionality is involved?
Compiler finds the right witness object based on the parameter type. Make sure there's exactly one visible for your type.
==========
P.S. correct me if I am wrong.
ну вот, Строуструп
Aug. 22nd, 2013 11:10 amВчера в кинотеатре посёлка Пало Альто ("Большое Палко") была встреча избирателей энтузиастов с Бьярне Строуструпом, профессором из Техаса. Бьярне известен тем, что придумал язык си++, за что ему, конечно, мир благодарен.
Я там озирался затравленно, ни одной знакомой рожи. Ну ладно, Джон Калб. Ну в смысле и сильно потолстевший Степанов, конечно; но я имею в виду взаимно знакомых.
Своё выступление Бьярне начал с картинок про то, какие джавщики глупые, от них постоянно мусор, и кому-то приходится собирать. Кроме мусора в виде захваченной памяти, Бьярне помянул и другие ресурсы - коннекции, файлы, которые джавщики, а также начинающие сишники, не умеют правильно отдавать. Ну хм, у них же нет виртуальных деструкторов.
Вообще-то речь шла о С++11, и он показывал новые фичи, лямбды и что-то вроде имплиситов, можно прям написать 11hours+20minutes+40seconds и оно поймёт. Почти как на скале. Только у си своя магия (и меньше мусора). Довольно славно фьючерсы можно использовать - но можно прямо из лямбды менять полуглобальную переменную - если вам "так удобнее" (в смысле, если вы ничему не учились, или учились, но ничему не научились).
У меня разрядился лаптоп, и я сидел развесив уши. Радовался за прогресс си, и недоумевал, хм, лямбды есть, тайпклассы есть (почти), а где монады? Или потому что тайпклассов нет, так и функторы с монадами рано вводить?
В конце лекции я и спросил его, а что, вот у вас уже и лямбды и концепты, уже, может быть, пора вводить монады и cps, тем более, что лямбды-то уже есть. И тут Бьярне, не особо зацепившись за концепты (которые, говорят, не включены в стандарт), сообщил, что фп все лузеры, и "мы не знаем, почему фп провалилось"; тут же добавил, что на самом деле сишный народ не поймёт. Знакомые речи, Джош Блок тоже говорил, что джавщик не способен понять лямбды, поэтому лямбды не нать. Не треба. Музыка должна быть напевной (это товарищ Жданов говорил гражданину Шостаковичу и господину Прокофьеву).
Следующим вопросом было что-то про концепты, потом про лямбды... короче, собравшимся была пофиг эта вся ваша ручная оптимизация, закат солнца вручную, а хотелось чего-то уже из 21-го века.
Чёс языками как-то быстро закончился, и все стали расходиться. Я хотел было пойти к Степанову, он же всё-таки как бы алгебраист, и спросить, он-то что думает о ментальном застое в головах и о внедрении монад, но потом подумал, ну что я буду троллить прямо при живом Бьярне рядом; бог с ними.
Ну и тем более Джон Бруер и Стив Ганц тут же вертелись, и мы стали чесать языками про аппликативные функторы, потом пошли со Стивеном в Титайм пить Russian Caravan и вкушать cheese platter (пока мой компьютер заряжается).
Но главное я вынес. Вся эта дурь с delete[], buffer overflow, memory leaks, она вызвана тем, что монадические действия выполняются как будто у нас тут чистые функции. Вместо >>= употребляют ;
И, кстати, с джавой, наверное, та же проблема. Потому что и в джаве память пролить запросто, начинай всю хрень складывать в кеш, на который есть ссылка из статика, и всё пролито.

Он использовал ресурсы вне монадного контекста.
Я там озирался затравленно, ни одной знакомой рожи. Ну ладно, Джон Калб. Ну в смысле и сильно потолстевший Степанов, конечно; но я имею в виду взаимно знакомых.
Своё выступление Бьярне начал с картинок про то, какие джавщики глупые, от них постоянно мусор, и кому-то приходится собирать. Кроме мусора в виде захваченной памяти, Бьярне помянул и другие ресурсы - коннекции, файлы, которые джавщики, а также начинающие сишники, не умеют правильно отдавать. Ну хм, у них же нет виртуальных деструкторов.
Вообще-то речь шла о С++11, и он показывал новые фичи, лямбды и что-то вроде имплиситов, можно прям написать 11hours+20minutes+40seconds и оно поймёт. Почти как на скале. Только у си своя магия (и меньше мусора). Довольно славно фьючерсы можно использовать - но можно прямо из лямбды менять полуглобальную переменную - если вам "так удобнее" (в смысле, если вы ничему не учились, или учились, но ничему не научились).
У меня разрядился лаптоп, и я сидел развесив уши. Радовался за прогресс си, и недоумевал, хм, лямбды есть, тайпклассы есть (почти), а где монады? Или потому что тайпклассов нет, так и функторы с монадами рано вводить?
В конце лекции я и спросил его, а что, вот у вас уже и лямбды и концепты, уже, может быть, пора вводить монады и cps, тем более, что лямбды-то уже есть. И тут Бьярне, не особо зацепившись за концепты (которые, говорят, не включены в стандарт), сообщил, что фп все лузеры, и "мы не знаем, почему фп провалилось"; тут же добавил, что на самом деле сишный народ не поймёт. Знакомые речи, Джош Блок тоже говорил, что джавщик не способен понять лямбды, поэтому лямбды не нать. Не треба. Музыка должна быть напевной (это товарищ Жданов говорил гражданину Шостаковичу и господину Прокофьеву).
Следующим вопросом было что-то про концепты, потом про лямбды... короче, собравшимся была пофиг эта вся ваша ручная оптимизация, закат солнца вручную, а хотелось чего-то уже из 21-го века.
Чёс языками как-то быстро закончился, и все стали расходиться. Я хотел было пойти к Степанову, он же всё-таки как бы алгебраист, и спросить, он-то что думает о ментальном застое в головах и о внедрении монад, но потом подумал, ну что я буду троллить прямо при живом Бьярне рядом; бог с ними.
Ну и тем более Джон Бруер и Стив Ганц тут же вертелись, и мы стали чесать языками про аппликативные функторы, потом пошли со Стивеном в Титайм пить Russian Caravan и вкушать cheese platter (пока мой компьютер заряжается).
Но главное я вынес. Вся эта дурь с delete[], buffer overflow, memory leaks, она вызвана тем, что монадические действия выполняются как будто у нас тут чистые функции. Вместо >>= употребляют ;
И, кстати, с джавой, наверное, та же проблема. Потому что и в джаве память пролить запросто, начинай всю хрень складывать в кеш, на который есть ссылка из статика, и всё пролито.
Он использовал ресурсы вне монадного контекста.