@scala_ru

Страница 925 из 1499
Daniel
07.09.2017
20:28:15
> "Replaced by an apply syntax, e.g. instead of (a |@| b).map(...) use (a, b).mapN(...)", "1.0.0-MF" революция в кошках

Nikolay
07.09.2017
20:31:47
это лучше или хуже?

Daniel
07.09.2017
20:32:33
для меня странно, этот символ жил черт знает сколько, а тут решили выкинуть

Nikolay
07.09.2017
20:33:02
а мотивацию объяснили?

Google
Nick
07.09.2017
20:33:20
Daniel
07.09.2017
20:33:44
я в комменте нашел, отсылки к мотивации нет

Alexander
07.09.2017
20:34:38
а мотивацию объяснили?
Да вроде как просто удобнее.

Daniel
07.09.2017
20:37:05
https://github.com/typelevel/cats/pull/1487

Nikolay
07.09.2017
20:40:17
> Now that we have enabled the partial unification fix (#1583) and dropped Unapply (#1679), I think we can move forward on this.. оно?

Daniel
07.09.2017
20:42:59
похоже связано, но тогда новые кошки могут не работать со скалкой до 2.11.9

Nikolay
07.09.2017
20:44:36
ну, это все еще 2.11 - обновиться реально

другое дело если бы вообще с 2.11 не работало

кстати, в чатике проводили опрос кто на какой версии - 2.12/2.11/раньше ?

silencer
08.09.2017
05:22:19
@krivdaallstarts @igorz @aleksei_t @vndzzz @fomkin @pomadchin clean time

Kirill
08.09.2017
06:04:17
Использующие cats, объясните мне, зачем в реальной жизни может пригодиться тайпкласс Show? Объяснение в туториалах я прочитал насчёт .toString у какого-нибудь родительского класса, но всё равно не могу сходу представить ситуацию, где этот тайпкласс нужен в реальном коде

Nick
08.09.2017
06:05:05
toString ты не всегда можешь переопределить

Google
Kirill
08.09.2017
06:06:51
Например, если мне дали какой-то API, который оперирует каким-то существующим классом , и мне нужно его превратить в строку как я хочу?

Nick
08.09.2017
06:07:07
Например да

Kirill
08.09.2017
06:12:29
То есть это в целом больше актуально когда пишешь какую-то библиотеку, в которой тебе приходится пользовательские типы превращать в строку? Или когда тебе дали кучу разных API, которые ты не контролируешь, и хочется написать дженерик код для превращения в строку без того, чтобы матчить на все возможные варианты чужих типов данных?

Я к тому, что если ты сам контролируешь код, ADT, и так далее, всё своё, то наверное и не нужен Show

Daniel
08.09.2017
06:15:22
в скалке можно еще в разные скоупы разные инстансы тайп класса тащить

но, имхо, из-за toString Show нужен почти никогда

дань хаскеллю

Kirill
08.09.2017
06:16:42
да, про это я тоже подумал, для разных форматов строки тащить разные инстансы, но это уже больше история про использование какой-то библиотеки, которая требует инстанса Show, нет?

Daniel
08.09.2017
06:18:13
не обязательно ты можешь сущность наружу отдавать в одном виде, в лог писать в другом

a.asJson.space4 и a.asJson.nospaces

Kirill
08.09.2017
06:20:39
space4 и nospaces - это методы, которые требуют инстанса?

Nick
08.09.2017
06:23:35
ну там другая история, там нужен Encoder (если речь про circe)

Kirill
08.09.2017
06:25:20
То есть эти штуки хотят implicit Encoder[T]? а если я захочу вызвать обе функции подряд, инстанс энкодера в оба попадёт один и тот же? в чём суть тогда?

Grigory
08.09.2017
06:26:19
по типу; если тип один; логично что ты хочешь использовать один и тотже анкодер

ну или я не понял формулировку твоего предложения...

Daniel
08.09.2017
06:27:15
Энкодер не при чем здесь. Это был пример разных форматом строк одного объекта

Nick
08.09.2017
06:28:00
а

ну ок

Kirill
08.09.2017
06:29:11
ну короче, насчёт шоу я понял, что да, в прикладном коде почти никогда, спасибо)

Google
Alexey
08.09.2017
06:31:04
Ну это же так, абстракция, ты можешь принимать Show для ответа в http и например в зависимости от заголовках пихать Show для json, html, xml etc..

Nick
08.09.2017
06:32:02
Kirill а что читаешь то?

Kirill
08.09.2017
06:32:14
advanced scala with cats решил наконец прочитать

Nick
08.09.2017
06:32:38
там же вроде написано для чего это используется

Aleksei
08.09.2017
06:33:28
Там это просто как пример в самом начале

Написано то много чего и где ?

Nick
08.09.2017
06:34:30
Kirill в общем да, дочитай, потом вопросы задавай)

Kirill
08.09.2017
06:34:36
там же вроде написано для чего это используется
Да не особо, конкретно там просто сказано что `It provides a mechanism for producing developer-friendly console output without using toString`

Alexander
08.09.2017
07:47:44
ну всё понятно же, Show - это фп, toString - это не совсем фп, плюс все бенефиты тайп классов

Henadz
08.09.2017
09:12:10
а есть какие-нибудь либы для работы с кейз-классами, когда надо на основе уже существующего объекта кейз-класса (со многими вложенностями других кейз-классов) создать объект того же самого класса, поменяв лишь одно поле? Чтобы не геморроиться с паттерн матчингом многих полей и вручную их пихать в конструктор По-моему тут уже даже скидывали что-то подобное

Alexander
08.09.2017
09:12:36
монокли, оптики

Henadz
08.09.2017
09:15:15
во, точно

спасибо большое

Henadz
08.09.2017
09:18:05
.copy
если объект простой, то да

но вот со вложенностями уже геморрой

лензы выглядят попривлекательней

Vladimir
08.09.2017
09:23:41
Если нужно что-то очень простое - https://github.com/adamw/quicklens

Google
Henadz
08.09.2017
09:37:28
http://julien-truffaut.github.io/Monocle/
да, уже подсказали, спасибо

Kirill
08.09.2017
09:53:28
import mikhail.supertagged.newtype._ abstract final class SumTag type Sum[X] = newtype[X] implicit def sumShow[T: Show]: Sum[T] = x => s"Sum($x)"
Первое сообщение как-то со вторым связано? не понял, где в первом используется Show, кроме того, что он требуется для T

Oleg
08.09.2017
09:53:48
implicit def sumShow[T: Show]: Sum[T] = x => s"Sum(${x.show})"

вот так

при этом Sum(x) - это в рантайме ссылка на x

просто тип обёрнут

Kirill
08.09.2017
09:55:26
а, я с либой Михаила не знаком, поэтому newtype меня смутило

Oleg
08.09.2017
09:55:42
я тоже, у него почти наверняка другие пакеты

Pavel
08.09.2017
09:56:18
решил заюзать circe, глянуть че как - ошибки выдаются просто жесть какие информативные...

прям выпилить все захотелось

Vladimir
08.09.2017
09:57:27
а какие там ошибки кроме cant find implicit encoder?

Pavel
08.09.2017
09:58:41
could not find Lazy implicit value of type io.circe.generic.decoding.DerivedDecoder[A]

вот я и про них

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

а там потом еще прикольные получаются, если будет какой-то конфликт имплиситов, то там они в комбо с компилятором такой бред выведут

Daniel
08.09.2017
10:01:10
конфликт имплиситов?

Pavel
08.09.2017
10:02:22
ну допустим на один тип находит два имплисита

Google
Kirill
08.09.2017
10:04:34
implicit def sumShow[T: Show]: Sum[T] = x => s"Sum(${x.show})"
То есть, разница между этим и x => s"Sum(${x.toString})" только в том, что при компиляции для Sum(x) потребуется инстанс Show[T] где T - это тип x?

Vladimir
08.09.2017
10:05:57
и вот для какого типа нету имплисита?
я б рекомендовал затянуть circe-derivation, он показывает конкретно для чего не нашлось

Vladimir
08.09.2017
10:07:49
но судя по тому, что дженерик A какое-то, то что-то в коде верхнего уровня не так

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