
Юрий
03.07.2017
08:15:57
+
в стек трейс смотри

A
03.07.2017
08:16:11
это формат вида /file/name/class.scala:number
а я хочу прям код

Google

A
03.07.2017
08:16:28
код метода, который свалился

Dmitriy
03.07.2017
08:16:39
в классфайлах нет кода

A
03.07.2017
08:17:12
ну вот, спасибо

Oleksandr
03.07.2017
08:17:13
можно поверху навернуть любой редактор кода
class.scala — это не .class

Alexey
03.07.2017
08:17:27
такое прокатит только с макросами, которые в лог тебе заранее подставят строки

Oleksandr
03.07.2017
08:17:30
или я снова не понял)

Oleg
03.07.2017
08:18:10
Но не модно без котов
вот без котов, простое решение без патмат
import shapeless._
object tryFold extends Poly1 {
implicit def onError[T] = at[util.Failure[T]](fail => s"error ${fail.exception}")
implicit def onSuccess[T] = at[util.Success[T]](x => s"success ${x.value}")
}
Generic[Try[Int]].to(Try(f)).map(tryFold).unify

Kirill
03.07.2017
08:19:23
Вот, как мне упростить вот это : https://scalafiddle.io/sf/bRX3XIK/0

Grigory
03.07.2017
08:22:50
кошек вставь

Oleg
03.07.2017
08:30:10
Вот, как мне упростить вот это : https://scalafiddle.io/sf/bRX3XIK/0
case class LoggingTry[T](tr: Try[T]) {
def logErr(t: Throwable) = ???
def logSuc[A](x: A) = ???
def report() = tr.fold(logErr, logSuc)
}
implicit val loggingTry = new MonadError[LoggingTry, Throwable] {
def pure[A](x: A): LoggingTry[A] = LoggingTry(util.Success(x))
def flatMap[A, B](fa: LoggingTry[A])(f: (A) => LoggingTry[B]): LoggingTry[B] = {
fa.report()
LoggingTry(fa.tr.flatMap(f andThen (_.tr)))
}
def tailRecM[A, B](a: A)(f: (A) => LoggingTry[Either[A, B]]): LoggingTry[B] = LoggingTry(
Monad[Try].tailRecM(a){ x =>
val res = f(x)
res.report()
res.tr
}
)
def raiseError[A](e: Throwable): LoggingTry[A] = LoggingTry(util.Failure(e))
def handleErrorWith[A](fa: LoggingTry[A])(f: (Throwable) => LoggingTry[A]): LoggingTry[A] =
LoggingTry(MonadError[Try, Throwable].handleError(fa.tr)(f andThen (_.tr)))
}}
А ещё подождите

Nick
03.07.2017
08:32:59
упростил так упростил)

Google

Oleg
03.07.2017
08:33:03
Я упоминал фриманатки?

Kirill
03.07.2017
08:33:06
Я сначала хотел написать, что букв много, но потом ты отредактировал сообщение....

Oleg
03.07.2017
08:33:38
Просто делаешь логирующий интерпретатор для Either и всё

Vadim
03.07.2017
08:36:01
а не проще просто имплицит класс на try с функцией, которая принимает как логировать и возврщает тот же try

Nick
03.07.2017
08:39:50
а не проще ли обычный try catch заюзать ?

Oleg
03.07.2017
08:40:06

Oleksandr
03.07.2017
08:40:32
ну теперь-то вопросов к коду нет, все идеально ясно с первого взгляда

Nick
03.07.2017
08:40:43

Alexey
03.07.2017
08:41:41
Люди подскажите, реально ли в цепочке тасков запустить асинхронно какие то два таска в разных контестах?
я всё пытаюсь для себя найти альтернативу фьючам, но всегда упираюсь в какое нибудь гавно

Юрий
03.07.2017
08:42:10

Dima
03.07.2017
08:43:37

Oleg
03.07.2017
08:44:14

Alexey
03.07.2017
08:44:39
ну что то типо
val task = for {
_ <- t1
res <- t2
} yield t2
t2.runAsync
ну и типо запустить t1 в одном контексте а t2 в другом

Oleg
03.07.2017
08:44:59
так какие таски?

Alexey
03.07.2017
08:45:23
ну monix например

Oleg
03.07.2017
08:45:39
да. Просто явно указываешь и всё
flatMap ручками

Google

KrivdaTheTriewe
03.07.2017
08:46:06

Oleg
03.07.2017
08:46:22
и поли выглядит как паттерн матч, так смешнее

Grigory
03.07.2017
08:47:19
тот же паттерн матчинг ток по типам

KrivdaTheTriewe
03.07.2017
08:47:49
мне очень меп и флетмеп по типам нравится )

Oleg
03.07.2017
08:48:17
если HList\Coproduct, то они не по типам

KrivdaTheTriewe
03.07.2017
08:48:53

Oleg
03.07.2017
08:49:04
но они не по типам

Grigory
03.07.2017
08:49:10
не надо только значения и типы путать)

Oleg
03.07.2017
08:49:44
это флэтмэп по Значениям, только функция ad-hoc полиморфная

Grigory
03.07.2017
08:50:04
(и по аргументу и по результату)

KrivdaTheTriewe
03.07.2017
08:50:52
но можно же написать .type

Oleg
03.07.2017
08:51:09

Grigory
03.07.2017
08:51:30
ну типа объекта тип
ну так // Case апликация // и применяется поли

Oleg
03.07.2017
08:52:26
.type - это singleton тип, который равен типу ровно одного вот этого конкретного значения, он не заматчится с более общим типом

KrivdaTheTriewe
03.07.2017
09:08:13
Но ты прав, там по значению :(

Google

Oleg
03.07.2017
09:09:01
чем он принципиально отличается примера пораньше для Try

KrivdaTheTriewe
03.07.2017
09:11:11
ничем , это подтверждение твоих слов и мой фейл.
но вообще , ты получаешь лист типов на вход , на выходе получаешь лист других типов , ровно то что и делает меп функтора
тогда как должен выглядит меп над типами ?

Oleg
03.07.2017
09:19:04

A
03.07.2017
09:19:42
как делаются библиотеки в scala ?

Admin
ERROR: S client not available

Mikhail
03.07.2017
09:19:45

A
03.07.2017
09:19:48
https://github.com/sbt/sbt-assembly ?

Mikhail
03.07.2017
09:21:16

A
03.07.2017
09:21:52
ну и как он делается, я нуб
http://www.joescii.com/2014/02/24/oss-scala-starter-kit/ ?

Oleg
03.07.2017
09:22:36
Просто у Mapper в shapeless.ops.list ты не получаешь:
- гарантию сохранения длины списка
- гарантию перехода из KindA в KindB каждого элемента

Mikhail
03.07.2017
09:22:36

A
03.07.2017
09:23:19
хочу свою приблудку для https://bugsnag.com расшарить

Mikhail
03.07.2017
09:24:02

A
03.07.2017
09:24:09
опенсорс
что-то гугл меня в 10 мест посылает

Mikhail
03.07.2017
09:25:46
опенсорс
у тебя там клиент для отсылки данных в этот багснап? я к тому, что если так то наверное в первой версии либы тебе не потребуется паблишить версию под скалажиэс

Google

A
03.07.2017
09:26:09
версии для жс и не будет


Mikhail
03.07.2017
09:32:51
вобщем
1. вот тебе пример конфига для паблишинга https://github.com/Rudogma/scala-supertagged . Обрати внимание на файлы build.sbt, project/Build.scala, project/plugins.sbt
2. убираешь оттуда все, что делается для кросспрожекта и делаешь тоже самое для обычного рутового проекта (если субмодулей у тебя нет)
3. тебе там еще пгп надо будет ключик сделать
4. зарегать акк на и сделать тикет чтобы забрать под себя группу (в случае sbt - это organization := "org.rudogma"). пример тикета https://issues.sonatype.org/browse/OSSRH-32078 . домен придется зарегать, хотя наверное можно сделать что-то типа com.github.myaccount - тут не знаю. я просто зарегал домен под группу и зарегал акк на осс с ящика с этого же домена - тогда там все автоматом выделяют и вопросов лишних не задают
5. когда тикет сделают и подтвердят право на паблишинг под этой группой, надо будет залить первую версию +publishSigned, затем sonatypeRelease . потом в тикете отписаться (только после первого раза) - если все норм, твой релиз разрешат и он скоро появится в централе (10 минут физ доступность, несколько часов - доступность в поиске на вебморде серч.централ) и все остальные релизы можно будет паблишить автоматом


A
03.07.2017
09:35:09
что за дурдом, как будто у гос-ва что-то выскуливаю
жава сложная

Mikhail
03.07.2017
09:35:59

A
03.07.2017
09:36:17
ну как в руби ?
раз, два, готов гемчик

Mikhail
03.07.2017
09:36:48

A
03.07.2017
09:37:31
я про одобрения и доступ

Mikhail
03.07.2017
09:38:02
тикет с забором группы под себя простая формальность и защита от дурака, чтобы всякие полоумные не создавали кучу мусора

Oleg
03.07.2017
09:38:15

A
03.07.2017
09:38:43
ладно, Mikhail спасибо

Mikhail
03.07.2017
09:40:05
ладно, Mikhail спасибо
кстати - да, в бинтрей вон тоже можно. резолверы под него тоже легко включаются и можно мусор всякий пихать
можно там под гугл косить. никто и не заметит. может на сайтах потом будут ссылаться и говорить, что гугель новую либу запаблишил, решил отказаться от аналитикса и сделал багснаг главным сервисом для сбора стат

Nick
03.07.2017
10:10:39
а у нас тут есть мастера дизраптора?

Alex
03.07.2017
10:13:55
Из Доты или из Computer Science? :)

Aleksei
03.07.2017
10:15:48
я тоже хотел сказать, что на него арканы нет, так что ни
даже у ИО есть аркана
но я так подозреваю по ИО тут больше спецов