Size: a a a

Scala User Group

2020 July 05

AZ

Alex Zhukovsky in Scala User Group
что ещё за Self блин
источник

AZ

Alex Zhukovsky in Scala User Group
зачем нужно явно писать собственный тип?
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
это не собственный тип в общем-то
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
ты делаешь интерфейс на чем-то, а чтобы работал потом имплисит резолюшн, в этом интерфейсе должно быть указание на это — как раз  тип Self
источник

AZ

Alex Zhukovsky in Scala User Group
я не понимаю в чем разница между

trait MyInterface[Self]:
 type F[A]
 def (item: Self) getSomething() (using Monad[F]): F[Int]

и

trait MyInterface
 type F[A]
 def getSomething() (using Monad[F]): F[Int]
источник

AZ

Alex Zhukovsky in Scala User Group
как вообще можно реализовать второй вариант?
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Alex Zhukovsky
я не понимаю в чем разница между

trait MyInterface[Self]:
 type F[A]
 def (item: Self) getSomething() (using Monad[F]): F[Int]

и

trait MyInterface
 type F[A]
 def getSomething() (using Monad[F]): F[Int]
ну ты же потом хочешь как-то находить инстансы этого майинтерфейс, раз делаешь given?
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
типа писать summon[MyInterface], да?
источник

DS

Doge Shibu in Scala User Group
Alex Zhukovsky
как вообще можно реализовать второй вариант?
class MyClass extends MyInterface же
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Doge Shibu
class MyClass extends MyInterface же
если не нужен поиск инстанса майинтерфейс, то пусть будет так, твой класс и будет инстансом
источник

AZ

Alex Zhukovsky in Scala User Group
Doge Shibu
class MyClass extends MyInterface же
но через given такой интерфейс не реализовать?
источник

DS

Doge Shibu in Scala User Group
Alex Zhukovsky
но через given такой интерфейс не реализовать?
Реализовать, но оно не будет делать то, что ты хочешь, скорее всего
источник

DS

Doge Shibu in Scala User Group
Тебе же надо будет связать инстанс MyInterface с соответствующим ему типом: SyncInterface и AsyncInterface.

Если он не будет параметризован, то ты никак этак связь выразить не сможешь
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Alex Zhukovsky
но через given такой интерфейс не реализовать?
источник

AZ

Alex Zhukovsky in Scala User Group
given syncInterfaceInstance1 as MyInterface1:
 type F[A] = Id[A]

 def getSomething()(using Monad[Id]): Id[Int] = 42

А
я разве не то же самое написал?
источник

AZ

Alex Zhukovsky in Scala User Group
а, понял
источник

AZ

Alex Zhukovsky in Scala User Group
то есть даже так
источник

AZ

Alex Zhukovsky in Scala User Group
тупо интерфейс в воздухе
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Да, но это не круто
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
То есть не интерфейс просто, а обжект, синглтон
источник