scala_ru | Unsorted

Telegram-канал scala_ru - Scala User Group

-

[RU] Scala Chat. README: https://github.com/scala-russian/about/blob/master/README.md

Subscribe to a channel

Scala User Group

Добрый день. Подскажите по обфускации. Нашёл sbt-proguard, подключал уже и как в документации и как в примере. В итоге sbt proguard создаёт proguard.jar, правда ругается

[error] Warning: can't write resource [META-INF/INDEX.LIST] (Duplicate jar entry [META-INF/INDEX.LIST])

Ругательсва игнорирую, запускаю через java -jar proguard.jar, получаю Type scala.Symbol not present, которая в sbt assembly вроде как исправлена.

Подскажите, как понять что не так делаю, может sbt-proguard умер уже давно и есть какая-то замена. Или как обфусцировать jar файл, собранный через sbt assembly, сторонним не sbt плагином?

Читать полностью…

Scala User Group

почему здесь не работает имеете в виду?

Читать полностью…

Scala User Group

ну если flatMap назвать

Читать полностью…

Scala User Group

val o1: Option[Int] = Some(42)
val o2 = o1.flatMap2(x => Some(x + 10))
val o2_2 = Monad[Option].flatMap2(o1)(x => Some(x + 10))

Читать полностью…

Scala User Group

trait Monad[F[_]] {
def flatMap2[A, B](fa: F[A])(f: A => F[B]): F[B]
def flatten2[A](fa: F[F[A]]): F[A] = flatMap2(fa)(identity)
}

object Monad {
def apply[F[_]](implicit instance: Monad[F]): Monad[F] = instance

implicit val monadOption = new Monad[Option] {
override def flatMap2[A, B](fa: Option[A])(f: A => Option[B]): Option[B] = fa.flatMap(f)
}

implicit class MonadOps[A, F[_]: Monad](self: F[A]) {
def flatMap2[B](f: A => F[B]): F[B] = Monad[F].flatMap2[A, B](self)(f)
}

implicit class MonadFlat[A, F[_]: Monad](self: F[F[A]]) {
def flatten2 = Monad[F].flatten2(self)
}
}

object Main {
import Monad._

def main(args: Array[String]): Unit = {
val o1: Option[Int] = Some(42)
val o2 = o1.flatMap2(x => Some(x + 10))
val o3: Option[Option[Int]] = Some(Some(42))
val o4 = o3.flatten2
println(o4)
}
}

Читать полностью…

Scala User Group

как думаете, почему?

Читать полностью…

Scala User Group

implicit class MonadOps[F[_]: Monad](f: F[_]){
def flatten2[A](implicit f: F[F[A]]): F[A] = Monad[F].flatten2(f)
}


у вас тут два раза параметр f
вам не нужен второй, не нуежн имлписит вообще

Читать полностью…

Scala User Group

а где в скоупе такой имплисит и откуда он должен взяться? )

Читать полностью…

Scala User Group

дак всетаки не видит метод для листа?

Читать полностью…

Scala User Group

у вас есть инстанс тайп класса для типа Option, так?
а тип переменной для которой вы ходите вызвать - Some
для типа Some у вас инстанса тайп класса нету

Читать полностью…

Scala User Group

и попробуйте не через экстеншн метод, а нпярямую вызвать Monad.apply[Option].flatten2(oo)

Читать полностью…

Scala User Group

у вас для других типов, например для листа работает такой синтаксис?

Читать полностью…

Scala User Group

    val oo = Some("foo")
val o = oo.flatten2

Читать полностью…

Scala User Group

там тип выводится Some скорее всего

Читать полностью…

Scala User Group

всем привет, есть тестовый трейт Monad в котором определен метод flatten2.

  trait Monad[F[_]] {
def flatMap2[A, B](fa: F[A])(f: A => F[B]): F[B]
def flatten2[A](f: F[F[A]]): F[A] =
flatMap2(f)(fa => fa)
}

object Monad {

def apply[F[_]](implicit instance: Monad[F]): Monad[F] = instance

implicit val optionMonad: Monad[Option] = new Monad[Option] {
override def flatMap2[A, B](fa: Option[A])(f: A => Option[B]): Option[B] = fa.flatMap(f)
}

implicit val listMonad: Monad[List] = new Monad[List] {
override def flatMap2[A, B](fa: List[A])(f: A => List[B]): List[B] = fa.flatMap(f)
}

implicit val setMonad: Monad[Set] = new Monad[Set] {
override def flatMap2[A, B](fa: Set[A])(f: A => Set[B]): Set[B] = fa.flatMap(f)
}
implicit class MonadOps[F[_]: Monad](f: F[_]){
def flatten2[A](implicit f: F[F[A]]): F[A] = Monad[F].flatten2(f)
}
}
}

Но в при сиользовании метод flatten2 не подцепляется
    val oo = Some(Some("foo"))
val o = oo.flatten2
println(o)

Пишет что value flatten2 is not a member of Some[Some[String]] val o = oo.flatten2. Ошибка где-то в implicit class?

Читать полностью…

Scala User Group

implicit f откуда взять то Скале?

Читать полностью…

Scala User Group

только я не могу понять почему с o3 у тебя работает, а у меня нет

Читать полностью…

Scala User Group

еще и с for comprehension можно использовать

Читать полностью…

Scala User Group

а flatMap2 для чего имплисить?

Читать полностью…

Scala User Group

вас не смущает что у вас две разных переменных 'f' в одном скоупе?
попробуейте объяснить каждую из них и решить какая не нужна

Читать полностью…

Scala User Group

если определять так

    implicit class MonadOps[F[_]: Monad](f: F[_]){
def flatten2[A](f: F[F[A]]): F[A] = Monad[F].flatten2(f)
}

то
    val ll2 = List(List("foo"))
val l2 = ll2.flatten2
println(l2)

дает ошибку
missing arguments for method flatten2 in class MonadOps;
follow this method with `_' if you want to treat it as a partially applied function
val l2 = ll2.flatten2

Читать полностью…

Scala User Group

    val oo = Some(Some("foo"))
val o = Monad.apply[Option].flatten2(oo)
println(o)

вот так работает

Читать полностью…

Scala User Group

видит, но не видит имплисита для него

Читать полностью…

Scala User Group

но выводит ошибку

could not find implicit value for parameter f: List[List[A]]
val o = oo.flatten2

Читать полностью…

Scala User Group

в целях дебага, потом когда все заработает перепишете обратно

Читать полностью…

Scala User Group

для List он видит метод

Читать полностью…

Scala User Group

это никак не связано с тем что я сказал. у вас все еще тип переменной и соответственно монады это Some, но нет инстанса для типа Some (если вообще в этом дело)

Читать полностью…

Scala User Group

для него Monad не определен. определен только для Option

Читать полностью…

Scala User Group

вопрос как сделать так, чтобы работало имеено так

val o = oo.flatten2

Читать полностью…

Scala User Group

Что и зачем стоит посмотреть.

Для общего развития:
DDD Aggregate — чтобы научиться лучше проектировать сервисы (после просмотра видео это произойдёт, я почти гарантирую это)
Шансы на мэйнстрим — если вы фан Scala и хотите, чтобы от 33-минутного видео у вас стало теплее на сердце от будущего языка

Для изучения интересных архитектурных кейсов:
Protobuf в движении — как можно строить динамические CRUD на proto-схемах
Alien: Typesafe DSL для доступа к Java foreign memory API — как шустро шелестеть байтиками для быстрого поиска по объявлениям Вертикалей

Доклады на разные конкретные темы:
Позвольте уточнить — для всех, кому интересны проверки на типах в Scala, в том числе refined-типах
R&D: Динамические sql-запросы на Scala в рамках проблемы text-to-sql — если интересно узнать больше про графовые БД в формате стендапа

Также, аннотации докладов можно почитать здесь: https://events.yandex.ru/events/vertech/fscala

Читать полностью…
Subscribe to a channel