169 похожих чатов

Всем привет. Вопрос следующий касаемо синтаксиса Скалы 3. Допустим есть

вот такой extension метод
object StringExtensions {
extension [F[_]](str: String)(using ApplicativeError[F, Throwable]) {
def doSomething[T: Decoder]: F[T] = ???
}
}
В коде я могу вызвать его вот так
str.doSomething[Apple]
явно указав тип T, но не указывая F[_]. Вот у меня возникла проблема, ambiguous implicits и нужно F указать явно. Вопрос в том как это сделать. Пробовал
str.[IO]doSomething[Apple]
str[IO].doSomething[Apple]
не сработало

7 ответов

12 просмотров

похоже что тайп аргументы плохо стакаются с экстеншенами. попробуйте вот так extension (str: String) def doSomething[F[_], T: Decoder](using ApplicativeError[F, Throwable]): F[T] = ???

Skeptical-Lynx Автор вопроса
Eλijah
похоже что тайп аргументы плохо стакаются с экстен...

с этим синтаксисом тоже есть ньюанс. Fку указать мне надо только в одном месте (в тесте). В других местах тип Fки хорошо подхватывается сам. А вот тип T надо указывать всегда. И не хотелось бы каждый раз строчить str.doSomething[F, Apple]

Skeptical Lynx
с этим синтаксисом тоже есть ньюанс. Fку указать м...

не думаю, что удастся избежать явной передачи типа, который не определяется по типу аргументов, сейчас есть экспериментальное, но уже задепрекейченное расширение https://dotty.epfl.ch/docs/reference/experimental/named-typeargs.html в будущих версиях его планируют заменить на частичное применение тайп-параметров

Skeptical-Lynx Автор вопроса
Oleg ℕižnik
не думаю, что удастся избежать явной передачи типа...

> в будущих версиях его планируют заменить на частичное применение тайп-параметров ну хоть так )

Oleg ℕižnik
не думаю, что удастся избежать явной передачи типа...

а почему задепрекейтили? Выглядит как что-то, что лучше иметь, чем не иметь

Никита Мязин
а почему задепрекейтили? Выглядит как что-то, что ...

наверное полагают, что частичное применение лучше

Skeptical Lynx
с этим синтаксисом тоже есть ньюанс. Fку указать м...

Если в одном месте, то можно просто вызвать метод как обычный, не-экстеншн, тогда можно явно передать тайп параметры. doSomething[IO](str)[Apple]

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта