@scala_ru

Страница 959 из 1499
Grigory
27.09.2017
11:27:42
tapl оч тяжело в свое время пошёл
она хорошая, у пирса много вообще крутого

A
27.09.2017
11:28:54
что ещё кроме tapl

Grigory
27.09.2017
12:02:28
что ещё кроме tapl
Бейзик категори фиори, эдвансед топикс ин тайпс

A
27.09.2017
12:02:46
ну ссылками давай

Google
Grigory
27.09.2017
12:02:59
я отдыхаю гуглани библиографию

Но не будь я на отыдахе дал бы ссылки

KrivdaTheTriewe
27.09.2017
12:12:12
я отдыхаю гуглани библиографию
сердцем ты с тайплевел

Oleg
27.09.2017
12:49:46
Посоны, а вот в sbt 1.0.1 пытаюсь сделать кросс паблиш, при смене версии он пишет [info] Setting Scala version to 2.11.11 on 0 projects. [info] Switching Scala version on: [info] Excluding projects:

и дальше перечисляет все мои модули

Почему sbt отказывается свитчить версию?

ясно https://github.com/sbt/sbt/pull/3526

короче, для истории, у кого будет такая же проблема, переписывайте с in ThisBuild локально на каждый проект

Alexey
27.09.2017
13:01:46
Или просто оставайтесь на 0.13.16

Daniel
27.09.2017
13:02:48
пр в 1.0.2 влит, мож там все ок уже (не считая коммента про костыль в решении)

Oleg
27.09.2017
13:06:14
а 1.0.2 уже есть?

Daniel
27.09.2017
13:07:48
а 1.0.2 уже есть?
да, 11 дней как

Pavel ?
27.09.2017
13:16:42
Ребзи, в @jvmchat опрос по поводу оформления докладов jug.ru, потыкайте плз)

Google
folex
27.09.2017
13:52:46
Ни у кого на примете нету не слишком большого опенсорсного проекта, в котором можно посмотреть как умные люди совмещают StateT с Future в реальной жизни? На эту тему почти ничего не гуглится как-то :(

Arthur
27.09.2017
13:54:31
разве он в качестве тайп параметра не принимает любую конструкцию с дженериком которой Future и является?

folex
27.09.2017
13:55:00
Да, принимает. Но как в итоге всё это скомпоновать в хороший юзабельный код — непонятно

Ну то есть дальше того факта что StateT принимает первым аргументом другой тип с дыркой я особо не уехал

Вот такую статью нашел, https://typelevel.org/blog/2016/10/26/edsls-part-2.html, но там маловато про это, и в целом сильно понятнее не стало

Arthur
27.09.2017
14:02:44
кстати, statet понадобилось just for fun, или реальный кейс где это очень нужно?

folex
27.09.2017
14:05:19
Есть реальный кейс

Denis
27.09.2017
14:05:23
https://markkarpov.com/post/free-monad-considered-harmful.html

folex
27.09.2017
14:06:15
Пытаюсь написать удобный фреймворк для написания тестов, и там соответственно стейт надо протаскивать, плюс он приходит во фьючах. Решил попробовать через stateT.

Но что-то как-то...

KrivdaTheTriewe
27.09.2017
14:06:31
https://markkarpov.com/post/free-monad-considered-harmful.html
только что читал статью, свободная монада это просто

folex
27.09.2017
14:06:48
Сколько раз уже тыкался во всё это — ни разу не вышло что-то путное сделать.

Denis
27.09.2017
14:08:41
тебе нужна монада? Чтение и запись стейта, а так же выполнение Future[A] ?

folex
27.09.2017
14:08:52
у меня пока что совершенно нет понимания как это всё воедино склеить, с какой стороны подойти или типа того

Вот и хочу какие-нибудь проекты опенсорсные посмотреть что ли

Google
folex
27.09.2017
14:09:32
А разве нельзя в тестах абстрагироваться от фьючи?
очень общий вопрос, не знаю что ответить

Denis
27.09.2017
14:09:38
trait MyAlgebra[S, F[_]] { def getState: F[S] def setState: F[Unit] def liftFuture[A](fa: Future[A]): F[A] }

это даст тебе возможность написать код не думая про StateT

и лишь потом в конце подумать один раз, реализовав эти три метода )

folex
27.09.2017
14:11:38
Да у меня нет понимания в какую сторону писать %))

мне эти подходы незнакомы, и я хочу им научиться

Denis
27.09.2017
14:11:57
Ща )

Я не знаю что скасти тупит но вот https://scastie.scala-lang.org/bb8M89aTRky9QWfk2wE1QQ

Смысл в том что вские StateT, EitherT и прочее нужно только at the end of the world. В конце, где то ближе к main

Denis
27.09.2017
14:24:40
Ну потому что так придумано было в хаскеле, ты описываешь все что нужно через тайпклассы, и в конце даешь инстанс для какого нибдь монструозного ReaderWriterStateT

Весь код описан относительно абстрактного F[_]

так как в скале тайпклассы это тоже объекты есть еще варианты как это сделать

Alexey
27.09.2017
14:26:37
Ну как бы StateT хорошо ложится на описание (сюрприз) логики, в которой есть состояние

Denis
27.09.2017
14:26:55
Ну да )

Только это уже конкретика ) для написания программы которая использует нечто с возможностью работы с состоянием StateT не нужен

Alexey
27.09.2017
14:28:08
Ну сервисы обмазывать StateT - это конечно плохо

Denis
27.09.2017
14:28:09
это открывает возможности композиции

если ты сразу пишешь относительно StateT и в друг где то другой стек - ты обречен обмазывать это все лифтами. В подходе с абстракным F[_] - ты это сделаешь один раз

Google
folex
27.09.2017
14:31:54
есть вопросы? )
По коду вроде всё понятно, но как это интегрировать к себе — нет %) Но я сейчас попробую!

и еще вернусь с вопросами :)

Denis
27.09.2017
14:32:13
давай

https://www.fpcomplete.com/blog/2017/06/readert-design-pattern

KrivdaTheTriewe
27.09.2017
16:08:51
ребята, а для чего вы Eval используете?

Oleg
27.09.2017
16:12:38
ребята, а для чего вы Eval используете?
для обхода всякой херни со стейтом

И для рекурсивной срани иногда

Типа вот есть у меня какие-то тайпклассы (описание типов для сваггера)

И они могут быть как-то хитро-рекурсивными

Тогда я во время вывода использую shapeless.Lazy, а в типах прописываю Eval

KrivdaTheTriewe
27.09.2017
16:16:00
Спасибо

было бы здорово это где-нибудь в продашн коде увидеть)

Oleg
27.09.2017
16:16:22
В продакшне у меня

Ну дефолтный котовий State он StateT[Eval

И вот представь себе в одном месте (не то, чтобы я гордился этим) он внутри макроса

KrivdaTheTriewe
27.09.2017
16:19:20
Весьма круто на самом деле, как мне кажется.

У меня пока нет мест , куда это подошло бы

Oleg
27.09.2017
16:20:35
на самом деле он просто заменяет lazy val

в куче мест

KrivdaTheTriewe
27.09.2017
16:21:02
ну основной же профит, там где рекурсивные алогоритмы

Google
KrivdaTheTriewe
27.09.2017
16:21:17
и нельзя @tailrec сделать , как я понял

Oleg
27.09.2017
16:21:54
Вместо того, что передавать что-то by name, и первой же строчкой этот параметр превращается в lazy val, можно просто передать Eval

и нельзя @tailrec сделать , как я понял
Ну да, но для несложной рекурсии в котовьей монаде специальный метод есть

Который будет и для нестексейф монад работать

из пьюрскрипта стащили

Nick
27.09.2017
16:30:50
Ну да, но для несложной рекурсии в котовьей монаде специальный метод есть
А ты понял как оно работает? Я сколько не читал этот труд вообще ничего не понял

folex
27.09.2017
16:43:38
Куда копать при ошибке could not find implicit value for evidence parameter of type cats.Monad[scala.concurrent.Future] ? Импорты: import cats._ import cats.implicits._ import scala.concurrent.ExecutionContext.Implicits.global Немного кода: def test[F[_] : Monad](ops: ClientOps[F]) = ??? test(opsInstance: ClientOps[Future])

Nick
27.09.2017
16:45:40
Импорта инстанса нет?

folex
27.09.2017
16:46:08
import cats.implicits._ импортит по идее

AllInstances, а в нем вот это https://github.com/typelevel/cats/blob/master/core/src/main/scala/cats/instances/future.scala

пробовал инстанс руками подставлять, тоже ругается, вот так:

ambiguous implicit values: [error] both method executionContext in trait AsyncTestSuite of type => scala.concurrent.ExecutionContext [error] and lazy value global in object Implicits of type => scala.concurrent.ExecutionContext [error] match expected type scala.concurrent.ExecutionContext [error] test(futClientOps)(cats.implicits.catsStdInstancesForFuture) [error] ^



Mikhail
27.09.2017
16:48:00
Удали импорт EC

folex
27.09.2017
16:48:04
Подставляю руками вот так: test(opsInstance: ClientOps[Future])(cats.implicits.catsStdInstancesForFuture)

Mikhail
27.09.2017
16:48:23
У тебя и так есть в скоуп контекст

folex
27.09.2017
16:48:44
оу, вот это было глупо. Спасибо!

KrivdaTheTriewe
27.09.2017
16:49:42
а через корневой билд.сбт можно как-то добавлять компилер плагины (парадайз) не создавая отдельный build.sbt в поддиректории подпроекта ? Ответ простой( также как и всё остальное, в сеттингсах подпроекта addCompilerPlugin( "org.scalamacros" % "paradise" % "2.1.0" cross CrossVersion.full),)

Страница 959 из 1499