
Oleg
05.07.2017
13:55:13
type FRes[X] = Future[Result[X]]
val result : FRes[String]
авось обманем scalac

Alexander
05.07.2017
14:00:22

Google

Oleg
05.07.2017
14:03:35
Неа.
сожалею, пройдите к трансформерам
вообще логично, он преобразует во flatMap
точнее в мап
у фьючи есть свой мап, и он не ищет имплиситной конверсии в синтаксисе

Alexander
05.07.2017
14:05:02
Да, тоже хотел написать.
Можно обёртку сделать, хех.

Oleg
05.07.2017
14:05:51

Alexander
05.07.2017
14:06:52
Верно. Хорошо, что я могу без трансформеров обойтись.

KrivdaTheTriewe
05.07.2017
14:34:43
@pomadchin @gurinderu https://habrahabr.ru/post/332450/

Nick
05.07.2017
14:35:12
боян
статье года 2

Grigory
05.07.2017
14:35:34
он пишет про проблемы aufs
можно дропать сразу

Google

Grigory
05.07.2017
14:35:55
(ну типа аутдейтед проблема 2 годовалой давности)
хабр + сбер + aufs = успех

KrivdaTheTriewe
05.07.2017
14:37:41
так вы чо, не комментарии палите, а читаете?

Grigory
05.07.2017
14:38:29
ну я не читаю хабр; ток тут когда вбрасывают что-то

KrivdaTheTriewe
05.07.2017
14:39:27

Vadim
05.07.2017
15:31:17
Подскажите, почему EitherT.flatMap не получается переписать в for-comprehensioin?
https://gist.github.com/Chicker/8a43fa7417a623b0a8b862af2b5b4119

Daniel
05.07.2017
15:33:20
вопрос дня)

Denis
05.07.2017
15:34:52

Vadim
05.07.2017
15:35:51

Denis
05.07.2017
15:36:49
ну у тебя же есть разница в том как написан вариант c flatMap и как написан вариант c for-comprehension

Vadim
05.07.2017
15:37:01
Хм, так работает)
Правда не очень красиво получается

Denis
05.07.2017
15:38:08
твой вариант с фором превращается после дешугаринга вот в это
eithConfig.map { config =>
val service = new GetInfoByIpServiceImpl(productionEnv)
service.countryCode(config.ipAddress)
}

Vadim
05.07.2017
15:39:32
Хм, я всегда думал, что for - это sugar для flatMap, а не для map
Я думал, что for - это налог do-нотации из Haskell. Sugar для >>= (bind)

Oleg
05.07.2017
15:40:26

Denis
05.07.2017
15:40:27
ну это и про flatMap

Google

Denis
05.07.2017
15:40:34
просто у тебя этого нет в твоем for
то что ты пишешь в yield делается через map
если конечно не просто возвращаешь переменную из скоупа
так как больше одной <-

Vadim
05.07.2017
15:43:10
Ааа, все понял ! >> то что ты пишешь в yield делается через map
Вот это я не понимал, я думал, что он то что я напишу в yield сам обернет в монаду EitherT, типа pure сделает

Denis
05.07.2017
15:45:01
неее ) слишком круто для нашего цирка )
но и pure бы тебе не помог

Oleg
05.07.2017
15:45:48

Denis
05.07.2017
15:45:53
потому что ты лифтишь F[A]

Vadim
05.07.2017
15:47:00
EitherT.right же лифтит )

Denis
05.07.2017
15:47:16
да, но ты же его явно не написал в своем примере

Vadim
05.07.2017
15:47:41
по идее, Either - right biased. for мог бы и догадаться)
for {
config <- eithConfig
service = new GetInfoByIpServiceImpl(productionEnv)
out <- EitherT.right(service.countryCode(config.ipAddress))
} yield out
А это по-красивее можно сделать? без промежуточного out?

Oleg
05.07.2017
15:49:15
т.е. можно .liftT https://github.com/typelevel/cats/blob/master/core/src/main/scala/cats/syntax/monadTrans.scala
но у меня обычно тип не выводит
а liftT[EitherT[?[_], AppError, ?]] выглядит хардкорновато
но можно просто засаммонить MonadTrans и юзать его методж

Vadim
05.07.2017
15:55:16
а что нужно import, чтобы liftT появился у Future?

Google

Oleg
05.07.2017
15:55:37
syntax.monadTrans._

Vadim
05.07.2017
15:56:58
что-то нету в cats.syntax.monadTrans (

Oleg
05.07.2017
15:59:04
версия котов?

Vadim
05.07.2017
15:59:51
а стоп, я только cats-core добавил в зависимости)
думал core обойдусь ;))
странно, все равно нет. версия сats 0.9.0

Oleg
05.07.2017
16:06:54
сорри

Admin
ERROR: S client not available

Oleg
05.07.2017
16:06:56
transLift

Vadim
05.07.2017
16:08:04

Oleg
05.07.2017
16:08:46
import cats.syntax.transLift._

Vadim
05.07.2017
16:09:29
в cats вообще нет MonadTrans, см скрин выше

Oleg
05.07.2017
16:10:04
да, я случайно со scalaz
в cats он называется TransLift

Vadim
05.07.2017
16:10:58
а на github есть

Oleg
05.07.2017
16:11:14
точнее назывался до https://github.com/typelevel/cats/commit/57d881974c0f2d4695749385e7603221bbf2c7bb

Vadim
05.07.2017
16:11:55
межу MonadWriter и MonadState должен быть MonadTrans ... а у меня его нет)))

Oleg
05.07.2017
16:12:21
ну я же кинул

Google

Oleg
05.07.2017
16:12:29
просто это свежий коммит, ещё не релизен

Vadim
05.07.2017
16:14:03
и package c именем transLift тоже нет
то есть, это не у меня глюки? а просто этих файлов еще нет в 0.9.0?

Oleg
05.07.2017
16:21:13

Vadim
05.07.2017
16:23:52
Какую-то ерунду пишет компилятор:
could not find implicit value for parameter extract: cats.syntax.TLExtract[cats.syntax.TLExtract.SingletonMT{type MT[F[_], B] = MT0[F,B]},cats.syntax.TLExtract.SingletonM{type M[B] = scala.concurrent.Future[B]}]
[error] } yield service.countryCode(config.ipAddress).liftT

Oleg
05.07.2017
16:24:20
но у меня обычно тип не выводит
а liftT[EitherT[?[_], AppError, ?]] выглядит хардкорновато

Denis
05.07.2017
16:26:15
yield service.countryCode(config.ipAddress).liftT
так нельзя делать )
ну можно, вот только бесполезно

Oleg
05.07.2017
16:26:53
зачем ты опять liftT в yield засунул?

Denis
05.07.2017
16:27:15
for {
...
out <- service.countryCode(config.ipAddress).liftT
} yield out

Vadim
05.07.2017
16:30:06

Denis
05.07.2017
16:30:25
сорян
это к Мартину
https://spring.io/blog/2017/07/05/introducing-spring-cloud-function
вроде не первое апреля

Vadim
05.07.2017
16:32:39
с liftT ерунда какая-то получается, оставлю лучше явный EitherT.right

Denis
05.07.2017
16:33:11
ну да или можешь импортнуть import EitherT._ и писать просто right

Vadim
05.07.2017
16:34:11
ага, всем спасибо)