
Kirill
06.10.2017
09:47:05
хочется чтобы можно было имплиситно импортировать инстансы, но при этом использовать те, которые нужно

Nick
06.10.2017
09:48:16
типа один импорт сделать?

Kirill
06.10.2017
09:48:19
ага

Google

Kirill
06.10.2017
09:48:47
чтобы пользователь свой object определил с всеми инстансами, которые ему нужны, импортнул, и использовались эти инстансы

Alexey
06.10.2017
09:49:18
Ну тут теги особо не спасут, лучшим вариантом будет разнести на разные пекеджи эти интсансы

Nick
06.10.2017
09:49:27
String @@ Database ? )

Alexey
06.10.2017
09:49:35
ну или руками подставлять

Kirill
06.10.2017
09:49:44
Вот Ник да, видимо как раз мне тегирование и надо

Alexey
06.10.2017
09:49:56
Ну это уже разные типы :)

Nick
06.10.2017
09:50:01
@eld0727 сделать через теги можно, но над ли

Alexey
06.10.2017
09:50:06
с разными типами конечно проблем нет

Kirill
06.10.2017
09:50:12
так разнесу я на разные пакеты, всё равно их оба импортируешь и в скоупе будет одно и то же
или да, руками )
Но руками не хочу заставлять

Nick
06.10.2017
09:50:49
если они оба будут в скоупе, то не скомпилится ж

Kirill
06.10.2017
09:51:03
вот и я о том же

Google

Nick
06.10.2017
09:51:26
я не вижу проблем в исполозовании конкретного импорта
import kirill.instances.dbLoader

Kirill
06.10.2017
09:51:54
руками имплиситы прописывать, ты имешь в виду?

Alexey
06.10.2017
09:52:08
тогда получится что делаешь тайпкласс для new ResourceLoader[String @@ Database] а не String

Nick
06.10.2017
09:52:28
вместо import kirill.instances._

Alexey
06.10.2017
09:53:42
импортить же можно не только вначале файла
{
imprort package.db._
use[String]("abc")
}
{
imprort package.disk._
use[String]("abc")
}
но это наркота чуть чуть

Kirill
06.10.2017
09:54:05
да, я понимаю, но вот этот код мне не нравится чет визуально )))

Nick
06.10.2017
09:54:25
ну он тебе блок показал
ты можешь прямо в функции импортить)

Alexey
06.10.2017
09:54:43
вообще похорошему в одной функции использовать два интсанса тайпкласса, чутка попахивает

Kirill
06.10.2017
09:54:55
если я хочу сразу же, в следующей строке, вызвать второй раз метод, только с другими инстансом, мне надо либо руками подставлять имплиситы, либо тегать, получается

Nick
06.10.2017
09:54:57
слегка?

Kirill
06.10.2017
09:55:00
да, наверное, попахивает
только как мне избавиться от такого
ну вот в примере хотя бы

Nick
06.10.2017
09:55:29
сделать две разные функции)

Mikhail
06.10.2017
10:08:56
тогда получится что делаешь тайпкласс для new ResourceLoader[String @@ Database] а не String
не над. точнее не обязательно, от кейса зависит. можно тайпкласс и для стринга делать, просто разные. а потом лифтишь до нужного, если очень хочется. (например в случае когда уже готовые тайпклассы есть и нет возможности или смысла править их)
val resourceLoaderFromXYZ:ResourceLoader[String] = ???
val resourceLoaderFromDB:ResourceLoader[String] = ???
implicit val r0:ResourceLoader[XYZ] = lift(resourceLoaderFromXYZ)
implicit val r1:ResourceLoader[DB] = lift(resourceLoaderFromDB)

Alexey
06.10.2017
10:10:33
какой то магический lift, который создаст мне инстанс нужного типа?

Google

Mikhail
06.10.2017
10:12:35
он не создает, также тегает просто нужный инстанс
хотя в супертаггед лифтом сам тег-обьект может служить в таком кейсе
object DB extends TaggedType[String]
val liftedDB = DB( resourceLoaderFromDB )
а почему бы и нет?
None - означает, что нет значения для ключа(или нет ключа в мапе - кому как нравится). Если кто-то положил в мапу ключ со значением нулл - значит ты его оттуда с нулом и достанешь

Nick
06.10.2017
10:21:22
так у него Some(null)

Y
06.10.2017
10:21:36

Mikhail
06.10.2017
10:21:52
так у него Some(null)
ты забыл, что скаловский гет возвращает опшин, который свидительствует о том - есть такой ключ или нет. ?
если было бы Map[String, Option[Param]] - тогда гет мог бы вернуть "немного(ничего)" - Some(None), что впрочем все равно не помешает засунуть туда по ключу нулл и получить немного нула обратно

Nick
06.10.2017
10:26:51
а
у него просто ключ есть, а значение null

Oleg
06.10.2017
10:40:15
Про "не импортировать ненужное" - эта техника всегда подводила, лучше так не делать и писать код, который будет даже если в скоупе есть все импорты

Alvo
06.10.2017
10:43:21
/stat@combot

Combot
06.10.2017
10:43:21
combot.org/chat/-1001034178083

Grigory
06.10.2017
10:46:21
как-то я просел
отпуск все дела
сместили в рейтинге ироды

Oleg
06.10.2017
10:57:11
сцук, я ж не флужу ничего, почему я в топи

Grigory
06.10.2017
10:57:44

Google

Nick
06.10.2017
11:03:40
@pomadchin у тебя фильтр Нижника включен

Grigory
06.10.2017
11:04:22

Nick
06.10.2017
11:04:36
я с тобой в отпуске был)
а если честно, я читал Олега и обдумывал

Daniel
06.10.2017
11:11:13

Grigory
06.10.2017
11:12:00

Daniel
06.10.2017
11:12:02
Community health 58%
надо методику найти)

Nikita
06.10.2017
11:24:50

Kirill
06.10.2017
13:14:01

Oleg
06.10.2017
13:15:01
У меня обычно для таких случаев у typeclass есть отдельный параметр
типа Database[Future, Sys <: System]
case object SystemA extends System
case object SystemB extends System
def loadDataFromA[F[_]: Database[?[_], SystemA.type]
ну или как-то так
лучше поконкретнее
теги, конечно, хорошее решение на скорую руку, однако не решают задачу принципиально

Kirill
06.10.2017
13:18:45
типа Database[Future, Sys <: System]
Так я в оригинальном вопросе про это и спрашивал, я так и хотел сделать, типо trait Printable[T, M <: Marker], в инстансах case object M1 extends Marker и использовать как Printable[String, M1].print(), но я подумал что мне сказали что это полная фигня так делать.

Oleg
06.10.2017
13:19:28
мне кажется, что это более корректное решение

Kirill
06.10.2017
13:19:56
А про что мне тогда ответили, когда я спросил про маркер трейт?

Google

Oleg
06.10.2017
13:21:24
ну просто Marker trait звучит как херня из рефлешновского прошлого
на самом деле можно даже без трейта
просто trait Printable[T, M]

Alexey
06.10.2017
13:33:28
Я видимо не правильно понял выражение marker trait

Евгений
06.10.2017
15:07:58
https://habrahabr.ru/company/jugru/blog/339524/
ох как хорошо

Vladimir
06.10.2017
15:24:20
Let it begin. The greatest shitstorm of our time!

Alexey
06.10.2017
15:24:58
Пока спокойно

Евгений
06.10.2017
15:38:26
Для желающих переучиться это хорошая возможность уже сейчас изучать язык, который очевидно через два-три года будет популярен.
очевидно

Nikolay
06.10.2017
15:38:51
очевидно

Евгений
06.10.2017
15:39:22
блин, это надо в Го-чатик кидать, а не сюда.

Alexey
06.10.2017
15:40:38
Их там порвёт же

Grigory
06.10.2017
15:40:57
не порвет
они прагматичны вы забыли

Евгений
06.10.2017
15:41:11
судя по отзывам там забаненных, их вообще от всего рвет

Grigory
06.10.2017
15:41:35
слишком мета юмор вбрасывается скалистами а они палками просто закидывают

Nick
06.10.2017
15:41:41
а кого там забанили?