
Denis
27.04.2017
12:06:58
первая строчка )

Alex
27.04.2017
12:12:02
токсоплазмоз

Vyatcheslav
27.04.2017
12:24:05
> На основании последних научных изысканий считается, что Toxoplasma gondii способна провоцировать развитие шизофрении
Сначала втаскиваешь в проект cats, а потом голоса в голове требуют втащить в проект shapeless и всякие фримонады

Grigory
27.04.2017
12:25:08
вот она и есть шизофрения
одна половина говорит юзай шаплез везде а вторая нигде

Google

Alex
27.04.2017
12:32:47
фриманатки есть в самих котах

Aleksey
27.04.2017
12:55:27
Наткнулся тут на гист интересный https://gist.github.com/folone/4945168 Кто в курсе этой фичи?

Alexander
27.04.2017
13:02:02
похоже на https://github.com/milessabin/shapeless/wiki/Feature-overview:-shapeless-2.0.0#singleton-typed-literals

Denis
27.04.2017
13:02:57
@fomkin https://github.com/fthomas/singleton-ops

Oleg
27.04.2017
13:04:35
это прям какой-то идрис уже

Denis
27.04.2017
13:05:16
ага
очень круто

Aleksey
27.04.2017
13:05:28

Denis
27.04.2017
13:05:34
карри ховард изоморфизм во все поля

Aleksey
27.04.2017
13:05:51
По этому и спросил, мол кто что знает.

Oleg
27.04.2017
13:06:05

Google

Aleksey
27.04.2017
13:06:13
у тебя TLS?
Но это не важно. Эта волшебная крышечка ни где не определна.

Oleg
27.04.2017
13:06:50
ну там же нужно TLS с "-Yliteral-types"

Denis
27.04.2017
13:07:02
я не уверен что крышечка оттуда
крышечка очень жирная
функции на тайплевел поднимает
scala> def factorial(n: Int):Int = if(n <= 1) 1 else n * factorial(n-1)
factorial: (n: Int)Int
scala> val test: ^(factorial(5)) = 102
<console>:14: error: type mismatch;
found : Int(102)
required: Int(120)
val test: ^(factorial(5)) = 102
^
офигеть же

Oleg
27.04.2017
13:07:45
вот вот

Denis
27.04.2017
13:08:09
может это ветка какая в шейплесе

Oleg
27.04.2017
13:08:09
очень похоже на какой-то пул-реквест в шейплесс, который ещё не в основной репе

Denis
27.04.2017
13:08:27
хотя это 2013 год

Oleg
27.04.2017
13:08:27

Denis
27.04.2017
13:09:03
Welcome to Scala version 2.11.0
Написал в гист, может ответит

Aleksey
27.04.2017
13:11:01
Я к чему это вообще. Подумалось, что было бы офигенно круто иметь что-то вроде классического движка бизнес-правил но на тайплевеле. Можно ведь считать мэтчигн имплистов констрейнт-солвером, да?

Oleg
27.04.2017
13:13:29
ой.... та же морда
меж тем это либа - порт хаскелевской либы Никиты Волкова, автора strelka, аналога vodka
Заметили, что у Фомкина и Волкова одинаковые мысли в голову приходят?

Google

Oleg
27.04.2017
13:20:43
но без крышечки
все сложные операции по обработке синглтон строк, чисел и т.п. нужно будет либо делать с помощью макроса
либо конвертировать в гигантские тайплевел структуры типа Nat ов и HList ов и делать очень долго
полцарства за крышечку

Iaroslav
27.04.2017
13:34:36
есть вопрос. А как хендлить ошибки в интерпретаторе для фримонады? Или просто трансформировать в что-то типа MonadError? А если надо бы прервать интерпретацию, например? И не идти дальше по иерархии.

Denis
27.04.2017
13:35:29
Есть вариант сделать отдельную алгебру для ошибок
а если в интерпретаторе, то финальная монада должна поддерживать ошибки

.
27.04.2017
13:37:04
Всем доброго времени суток, может у кого-то есть опыт использования jwt с akka-http, если да, подскажите библиотеки или литературу. Спрашиваю тут т.к. в том числе интересует субъективный опыт.

Iaroslav
27.04.2017
13:37:55

Denis
27.04.2017
13:38:46
не пойдет, free паразитирует на семантике flatMap финальной монады

Oleg
27.04.2017
13:38:58

Denis
27.04.2017
13:38:59
если она не пойдет после ошибки то и фри не пойдет

Oleg
27.04.2017
13:39:26
а если только free вокруг, то точно не пойдёт

Iaroslav
27.04.2017
13:39:41
Точно же. Спасибо

Alexander
27.04.2017
13:44:59
https://gist.github.com/Tvaroh/a2fd772f7a66aaafc2ea48ce1fc3646d
как думаете - будет тут extends AnyVal работать?

Vitalii
27.04.2017
13:46:26
гайс, есть варинты рефакторинга без количества больше количества if ?
https://gist.github.com/anonymous/4894121e1cda018916bd896586159565

Oleg
27.04.2017
13:46:38
а зачем?

Alexander
27.04.2017
13:47:58
чтобы не аллоцировался имплиситный класс при таггинге?

Vitalii
27.04.2017
13:48:36
в пулл реквесте на проекте комент есть от индуса ревьюера:
Refactor the code and avoid multiple if checks

Google

Vitalii
27.04.2017
13:48:52
вот и думаю варианты, но чет не могу придумать

Denis
27.04.2017
13:49:25
Ад какой
беги оттуда

Oleg
27.04.2017
13:51:16

?Ivan
27.04.2017
13:51:48

Admin
ERROR: S client not available

Alexander
27.04.2017
13:51:57
хм, а тайп инференс куда делся, ща проверю
http://stackoverflow.com/questions/14929422/should-implicit-classes-always-extend-anyval

Oleg
27.04.2017
13:53:33
но вопрос был - зачем методы

Alexander
27.04.2017
13:53:59
поправил gist
не понял вопрос

Oleg
27.04.2017
13:54:45
ну в shapeless обычно просто x: A @@ X = tag(a)
не пойму профит от метода

Alexander
27.04.2017
13:55:49
что такое tag у тебя в примере?
какой профит от явного указания типа?
val login = "foo".@@[Login]

Oleg
27.04.2017
13:56:38
то, откуда маквайр скопипастил свои теги
т.е. это - копипаста второго порядка у Сабина

Google

Alexander
27.04.2017
13:57:29
в шейплесе сначала функция, здесь можно в ооп стиле

Oleg
27.04.2017
13:57:48

Alexander
27.04.2017
13:58:07
чё?

Oleg
27.04.2017
13:59:33
не хотелось спорить о терминах, но dot notation - это не более ООП, чем ФП стиль в скале

Alexander
27.04.2017
14:00:13
короче, удобнее так, разница вроде очевидна

Oleg
27.04.2017
14:00:24

Alexander
27.04.2017
14:00:40
этого и не требуется :)
вопрос-то о другом

Oleg
27.04.2017
14:00:49
яркий пример

Alexander
27.04.2017
14:02:29
мне не интересно продолжать это сравнение
object tag {
def apply[U] = new Tagger[U]
trait Tagged[U]
type @@[+T, U] = T with Tagged[U]
class Tagger[U] {
def apply[T](t : T) : T @@ U = t.asInstanceOf[T @@ U]
}
}
Здесь для каждого тага создаётся объект Tagger

Oleg
27.04.2017
14:03:51
case class Foo ( db: Database @@ LongBusinessIdentityName )
implicit val foo1 = Foo( tag ( mkDatabase ("longBusinessIdentity") ))
implicit val foo2 = Foo( mkDatabase ("longBusinessIdentity").@@[LongBusinessIdentityName])
implicit val fooBad = Foo (mkDatabase ("longBusinessIdentity").@@) // - throws java.lang.ClassCastException: Database cannot be cast to scala.runtime.Nothing$

Alexander
27.04.2017
14:03:56
не вижу копипасты из шейплеса, по-моему это адаптировалось скорее из Scalaz

Oleg
27.04.2017
14:04:18
по крайней мере были, пока Майлз не придумал эти в своём блоге

Alexander
27.04.2017
14:06:17
что мы сейчас обсуждаем, и что иллюстрирует код выше? extends AnyVal должен работать в моём случае

Oleg
27.04.2017
14:06:39