mu

Тайные хаскеллисты в Apple

Такое впечатление, что в Apple тайно поселились хаскеллисты. https://developer.apple.com/swift/blog/?id=8 :

extension MyBool : Equatable {}
func ==(lhs: MyBool, rhs: MyBool) -> Bool {
 switch (lhs, rhs) {
 case (.myTrue,.myTrue), (.myFalse,.myFalse):
  return true
 default:
  return false
 }
}
if a == a {}
if a != a {}

Мало того, то они частично синтаксис копируют. Они еще переносят части стандартных либ.

Когда язык более-менее оформится, счастье наступит тогда, когда всё это дело выйдет за пределы платформ Apple.

Метки: , , ,
фоновое изображение
(Anonymous)
3.3МБ картинку как фоновое изображение, (фейспалм)
я еще могу понять в жж у гламурной кисы такое, но технарю сие непростительно
Re: фоновое изображение
ну как не прислушаться к человеку, чья работа связана с гламурностью?
с учетом того, что на хаскелле много кодить не приходится, хаскеллист будет испытывать дежавю.
А что тут хоть как-то похоже на хаскель?
протокол Equatable — это Eq.
!= внутри определяется через ==, поэтому достаточно определить последнее.
Паттерн-матчинг.

А еще стрелочка. Вот зачем они её? Двоеточие бы прокатило :)
Да, нарисованное мясо - это нарисованное мясо. А тайпклассы - не протоколы.
Например потому, что между тайпклассом и типом, для которого есть имплементация тайпкласса отношения подтипирования нет, кайнд тайпкласса вообще не star а между типом и протоколом такое отношение есть, судя по документации свифта.
Ну а кто спорит?

Кайнд у тайпкласса * -> Constraint, а протокол — это скорее просто тег к типу, с возможностью имплементации. Однако, это не мешает им проводить аналогии настолько, насколько это возможно.

Edited at 2014-08-14 09:25 am (UTC)
> Ну а кто спорит?

Вы и спорите.

> Однако, это не мешает им проводить аналогии настолько, насколько это возможно.

Ну так "тайпкласс не протокол" и означает, что проводить аналогии насколько нибудь далеко, чтоб можно было из этого какую-то пользу извлечь, нельзя. Единственное, что у них общего - это то, что реализации тайпклассов/протоколов для типов можно описывать отдельно от типов. Ну, можно на основании этого предположить, что у протоколов тоже какие-то сложности с модульностью или когерентностью должны быть. Все, дальше уже не продвинуться.
> Вы и спорите.

где? :)

> Ну так "тайпкласс не протокол" и означает, что проводить аналогии насколько нибудь далеко, чтоб можно было из этого какую-то пользу извлечь, нельзя...

Если бы вам в детстве не проводили аналогии между четырьмя яблоками и цифрой "четыре", то вы бы не научились считать, хотя цифра "четыре" никак не похожа на четыре яблока :)


Edited at 2014-08-14 09:58 am (UTC)
> Если бы вам в детстве не проводили аналогии между четырьмя яблоками и цифрой "четыре", то вы бы не научились считать, хотя цифра "четыре" никак не похожа на четыре яблока :)

Да, но тут другое дело. Научить считать таким образом можно. А научить использовать протоколы или наоборот классы типов на основе знаний о соответственно вторых/первых - нет. Потому что проводимые аналогии ложные, либо непродуктивные: ничего интересного из них не следует, зато неправильное вполне может.
> А научить использовать протоколы или наоборот классы типов на основе знаний о соответственно вторых/первых - нет.

а я думаю, да. Из тайпклассов в протоколы — полностью. Из протоколов в тайпклассы — лишь частично. У меня в жизни так произошло, что тайпкласс я понял раньше, чем интерфейс(java, c#) и протокол(objc).
М-м-м... протоколы — это из Objective C, а туда оно вряд ли влезло из хаскеля.

Паттерн-матчинг есть сейчас, по-моему, вообще везде.

Ну, стрелочка — может быть.
М-м-м... протоколы — это из Objective C, а туда оно вряд ли влезло из хаскеля.

это да, но в objc протоколах имплеменации по умолчанию нет. Вообще без интерфейсов или протоколов или тайпклассов (подчеркнуть) хоть немного статически типизированный язык выглядил бы недоразвитым. Поэтому они должны были что-то воткнуть.

Паттерн-матчинг есть сейчас, по-моему, вообще везде.

в objc как раз нет



Edited at 2014-08-14 09:57 am (UTC)