Size: a a a

2020 July 16

В

Вафель in rust_offtopic
Hirrolot
тем что мне не нужно чесать мизинцем фурункул в ухе
чегобля
источник

H

Hirrolot in rust_offtopic
фурункул знаешь что такое?
источник

KR

Kai Ren in rust_offtopic
Nick Linker
В скале если, то это неявный параметр, который компилятор ищет в текущем implicit scope. Пример:
    @tailrec
   def find[A, B](key: A, xs: List[A])(implicit e: Eq[A]): Maybe[A] = xs match {
       case Nil => Nothing
       case x :: xs => if (e.eq(key, x)) Just(x) else find(key, xs)
   }
это функция, которая принимает 2 явных параметра и один неявный e.
Задача решается следующая: дано значение типа A и список значений того же типа A, найти его первое вхождение, если оно там есть.
Алгоритм простой: идём сначала до конца и проверяем, равен ли элемент или нет. Естественно возникает вопрос: а кто сказал, что значения можно сравнивать?
На этот вопрос даёт ответ имплисит e (его часто ещё называют witness), который и обеспечивает нужную функциональность.
Короче, всё как в Rust, только в Rust мы обычно пишем find<A: Eq>.

Когда эта функция вызывается, например:
val xs = List(1, 2, 3)
val y = find(4, xs)
то компилятор ищет в текущем неявном скоупе какой-нибудь объект типа Eq[Int] и если он его находит в единственном экземпляре, то подставляет туда и формирует вызов. Ошибкой является как то, что объекта такого типа не находится, так и то, что таких объектов больше одного.
Принести значение нужного типа в неявный скоуп можно импортом, объявлением в текущем классе, в объекте-компаньоне и как-то ещё, не суть важно (тем более правила поиска имплиситов менялись от версии к версии, сейчас я не в курсе каков порядок поиска).
Спасибо!

Жесть! Одерски же умный мужик, чего он тайпкласы не завёз, в чём профитность?
В отсутствии когеренции?
источник

p

polunin.ai in rust_offtopic
Doge Shibu
Ну и т.п. у скалы правила поиска инстансов очень своеобразные
и зачем
источник

В

Вафель in rust_offtopic
Hirrolot
фурункул знаешь что такое?
Ну и? Нафига его тебе мизинцем в ухе чесать, от обычного кода?
источник

H

Hirrolot in rust_offtopic
Вафель
Ну и? Нафига его тебе мизинцем в ухе чесать, от обычного кода?
потому что специализации нет
источник

KR

Kai Ren in rust_offtopic
Hirrolot
фурункул знаешь что такое?
ты не перепутал с межушным ганглием?
источник

p

polunin.ai in rust_offtopic
то что в расте считается большой ошибкой в хаскеле считается нормой
источник

H

Hirrolot in rust_offtopic
polunin.ai
то что в расте считается большой ошибкой в хаскеле считается нормой
это и в расте маленькая ошибка
источник

В

Вафель in rust_offtopic
Hirrolot
потому что специализации нет
источник

p

polunin.ai in rust_offtopic
мда
источник

H

Hirrolot in rust_offtopic
да сделай префикс и ниибись
источник

H

Hirrolot in rust_offtopic
совсем уже разбаловали всякими растами
источник

H

Hirrolot in rust_offtopic
в си префиксы делают
источник

KR

Kai Ren in rust_offtopic
Hirrolot
совсем уже разбаловали всякими растами
60-70% времени расставляю атрибуты и пишу растдоку
источник

H

Hirrolot in rust_offtopic
все в порядке на руси пока хиро может в си
источник

p

polunin.ai in rust_offtopic
хаскель отличный язык, всем буду рекомендовать
источник

H

Hirrolot in rust_offtopic
Kai Ren
60-70% времени расставляю атрибуты и пишу растдоку
я еще один раз измерял, что кода в 15 раз ровно больше генерируется, чем я пишу
источник

JM

John Meow in rust_offtopic
polunin.ai
Все языки компилируемые
Тебе нужен язык без ВМ?
источник

H

Hirrolot in rust_offtopic
А TabNine даже помогает аннотации расставлять
источник