Size: a a a

Scala User Group

2020 August 04

Oℕ

Oleg ℕizhnik in Scala User Group
Sergey Alaev
GADT - это же чисто академическая штука? Никогда не видел его в реальном коде.
вы ZIO пользовались когда-нибудь?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
источник

Oℕ

Oleg ℕizhnik in Scala User Group
вот IO - это пример GADT
источник

EB

Eugene Bosiakov in Scala User Group
Sergey Alaev
можно название типа?
Request[A], WrappedRequest[A]
источник

AT

Aλeksei Tereχin in Scala User Group
А опшн?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Eugene Bosiakov
Request[A], WrappedRequest[A]
нет, это не GADT
источник

Oℕ

Oleg ℕizhnik in Scala User Group
ну что ещё
источник

Oℕ

Oleg ℕizhnik in Scala User Group
cats effect Resource пример GADT
источник

Oℕ

Oleg ℕizhnik in Scala User Group
cats Eval
источник

SA

Sergey Alaev in Scala User Group
Oleg ℕizhnik
нет, это не GADT
Можно тогда пример GADT, который не монада и не работает с произвольным типом?
источник

KS

Kirill Shelopugin in Scala User Group
Как связаны GADT и монады?
источник

SA

Sergey Alaev in Scala User Group
пока все примеры - это контейнеры значений с композицией. Это всё хорошо, но немного не про бизнес-логику
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Kirill Shelopugin
Как связаны GADT и монады?
фримонадность встраивают через гадтность
источник

KS

Kirill Shelopugin in Scala User Group
Но GADT не подразумевают никаких монад.
источник

KS

Kirill Shelopugin in Scala User Group
Мы же можем говорить про GADT, никак не затрагивая монады, верно?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Sergey Alaev
Можно тогда пример GADT, который не монада и не работает с произвольным типом?
легко, но сейчас лекция начинается
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Sergey Alaev
Можно тогда пример GADT, который не монада и не работает с произвольным типом?
sealed trait AuthRequest[A]

case class SimpleAuth(user: String, password: String) extends AuthRequest[(String, String)]

case class BearerAuth(token: String) extends AuthRequest[String]

case class ExternalAuth(provider: String, id: UUID) extends AuthRequest[ExtAuth]

def getAuthReqData[A](req: AuthRequest[A]): IO[A] = req match {
   case SimpleAuth(user, password) => (user, password).pure[IO]
   case BearerAuth(token) => token.pure[IO]
   case ExternalAuth(provider, id) => getExtAuthFor(provider).getAuthData(id)
}
источник

Oℕ

Oleg ℕizhnik in Scala User Group
не монада, не произвольный тип, чистая предметка
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Kirill Shelopugin
Мы же можем говорить про GADT, никак не затрагивая монады, верно?
можем, просто из-за игерности, в скале всегда приходится докостыливать стекобезопасность внутрь типа, это заставляет половину известных монад иметь конструкторы, соотв. фриир монаде, и это вынуждает использовать GADT
источник

Oℕ

Oleg ℕizhnik in Scala User Group
поэтому так много монад приходит сходу в голову
источник