
Dmitry
10.12.2017
17:31:41
но что смишно
в китае линкидин пашет а слайды нет

Sergey
10.12.2017
17:32:15
ладно, расчехлим vpn

Dmitry
10.12.2017
17:32:19

Google

Dmitry
10.12.2017
17:32:46
traverse/sequence это не обязательно для монад
апликативы подойдут

Mikhail
10.12.2017
17:54:15

Dmitry
10.12.2017
17:54:27
ноп
тут уже ничего не спасет
я про то что человек просто хотел пример как вывернуть всякие вложенные типы с дырками

Oleksandr
10.12.2017
17:55:30
с монадками очень легко сделать неверный переход от частного к общему

Dmitry
10.12.2017
17:55:43
и да, пример с фьючей жесть

Oleksandr
10.12.2017
17:55:49
казалось бы, ты уже все понял, и это точно буррито, а вот нет

Igor
10.12.2017
17:59:03
Вот (неплохой) доклад и в нем кстати акцентируют внимание на проблемах обычных монад
https://youtu.be/KGJLeHhsZBo?t=6m5s

Dmitry
10.12.2017
18:04:11
https://github.com/djspiewak/emm
https://rubenpieters.github.io/monadtransformer/cats/eff/2017/01/27/monadtransformer-vs-effmonad-1.html
но зачем когда есть free

Google

Dmitry
10.12.2017
18:12:01
сам не смотрел, но описание что надо https://youtu.be/2TDDDFGa8-0
но там полный ай спик фром май харт

Alex
10.12.2017
18:39:43

Vasiliy
10.12.2017
19:02:08
Я правильно понимаю, что если объект категории — это тип, то значения вообще не важны?
ну т.е. если у нас функция (стрелочка) была из String в Int, то после преобразования она также должна вести из, напирмер, Option[String] -> Option[Int] , а значение - пофиг, может и измениться

Eugene
10.12.2017
19:10:24
Да, если категория типов, то ничего кроме типов и морфизмов между типами она не рассматривает

Vasiliy
10.12.2017
19:11:50
хм... У меня такое ощущение, что в курсе одерского, когда он рассказывает про монады, он значениями также оперирует

Eugene
10.12.2017
19:13:18
Раз уж про теоркат пошёл разговор, то тоже вопрос есть, сегодня размышлял не смог найти ответ. Про natural transformation. Есть ли для двух функторов некоторые требования, наличие которых необходимо и достаточно для того чтобы построить между ними морфизм? Или это сугубо кастомная штука?

Alexey
10.12.2017
19:13:58

Eugene
10.12.2017
19:15:02

Vasiliy
10.12.2017
19:15:27

Alexey
10.12.2017
19:16:12
Просто так взять и сказать что между контейнерами есть преобразование вряд-ли получится

Eugene
10.12.2017
19:17:04
Кастомная
Да вот я тоже не смог найти к чему прицепиться. Есть только компоненты nt, два функтора м ничего больше

Alexey
10.12.2017
19:19:49
Кстати вот сейчас завезут синглтон типы, а кто нибудь вкурсе можно ли будет без шаманства сделать 1 + 2 на уровне типов

Vasiliy
10.12.2017
19:21:42
а, ну вот, например, в последней лекции первой недели Functional Program Design in Scala он рассказывает про Монады. Там он показывает Left Unit Law
Some(x).flatMap(f) == f(x)
если речь идёт о типах, как я понимаю, должно быть так

Eugene
10.12.2017
19:23:31
Да так тут полный параметрический полиморфизм. То есть пофиг какое значение.
Это справедливо для любого типа и значения x

Vasiliy
10.12.2017
19:25:09
а нам не достаточно проверить
Some(x).flatMap(f).getClass() == f(x).getClass()
?

Google

Eugene
10.12.2017
19:29:53
Я понял вопрос про значения. В законах сравниваются не типы а значения выражений. Сам тип то контейнера не может меняться.
А как это тогда соотнести с тем что в категории типов содержатся только типы и законы сформулированы для типов - Бартош пока ещё не рассказал ))))

Vasiliy
10.12.2017
19:33:03
вот блин, я опять запутался. Вот пока мы работаем с типами всё понятно и вроде логично, но как мы переходим к значениями (а все к ним незаметно переходят, никак это не оговаривая) опять начинается путаница.

Nikita
10.12.2017
19:34:42

Alexander
10.12.2017
19:35:06

Eugene
10.12.2017
19:38:03
Проставляешь туда все стопицот лонгов стрингов и тд - и значения равны. Не типами ессно а именно значениями

Vasiliy
10.12.2017
19:42:11
но в данном случае тогда мы говорим не про категорию типов

Eugene
10.12.2017
19:43:13
А там и законы иначе выглядят. В виде диаграмм.
А не выражений на языке программирования

Vasiliy
10.12.2017
19:45:07

Eugene
10.12.2017
19:45:32
Да

Alexey
10.12.2017
19:46:34

Eugene
10.12.2017
19:46:41

sherzod
10.12.2017
19:47:38

Alexey
10.12.2017
19:47:43
Ну T как я понимаю это не тип а объект
Или тип ?

Eugene
10.12.2017
19:48:12
Как я понимаю нет. Именно тип

Google

Vasiliy
10.12.2017
19:48:37
ну тип - это объект в категории типов )

Eugene
10.12.2017
19:48:47
T2 это например option option a

sherzod
10.12.2017
19:48:52
Но это не так
Можно привести например такой пример
Объекты - типы
Морфизмы - Generic типы от двух аргументов

Eugene
10.12.2017
19:49:35
Морфизм это любая функция между типами

sherzod
10.12.2017
19:49:43
Не обязательно.
Морфизмами могут быть и успешно являются generic типы.
trait GenericCategory[->>[A, B]] {
def id[A]: A ->> A
def compose[A, B, C](g: B ->> C, f: A ->> B): A ->> C
}

Eugene
10.12.2017
19:51:53
Окей пусть, это более общий термин чем просто функция. В категории порядка например стрелки это вообще сравнения больше/меньше

Admin
ERROR: S client not available

Oleg
10.12.2017
21:03:10
В данном чате уместны вопросы по Бартошу?

Grigory
10.12.2017
21:05:04
Спрашивай конечно. Если воспользуешься поиском то можешь найти разные обсуждения (пока ждешь ответа аудитории D:)

Oleg
10.12.2017
21:06:19
точка в категории <-> тип (множество) в программе
стрелка в категории <-> чистая функция одного аргумента в программе
пока всё верно понимаю?

Eugene
10.12.2017
21:10:22
Ну вот выше был разумный пример стрелки которая не функция.

Oleg
10.12.2017
21:12:22
ну, я имею в виду, когда речь идёт о категории Hask

Grigory
10.12.2017
21:12:55
Типы это типы) Меня икспирты поправят
элемиенты бывают разных типов

Oleg
10.12.2017
21:12:57
так вот, вводится точка, называемая Void, и от неё ко всем остальным есть стрелки
Void в программе- это тип, не имеющий значений. Что в программе соответсвует стрелке Void -> A?
Функция, принимающая Void и возвращающая A? но мы не можем принять значение типа Void, потому что таких значений нет по определению типа Void

Eugene
10.12.2017
21:16:36
Функция absurd. Как раз тот факт что мы не можем никак ее вызвать подтверждает то, что мы можем получить из неё что хотим. На “бумаге»
Он же и говорил - типа только попробуйте меня вызвать я все что угодно могумвернуть )))

Google

Eugene
10.12.2017
21:18:32
Disclaimer - это я так понял, могу пороть чушь

Oleg
10.12.2017
21:24:21
Какие можно определить типы, изоморфные Void?

Alex
10.12.2017
21:25:13
absurd это типа из логики
изо лжи следует что угодно
ex falso quodlibet
а войд это ненаселенный тип
то есть у него изоморфно может быть только имя, больше нечему

Oleg
10.12.2017
21:27:58
скажем, в scala, если определить object Foo, тип Foo.type будет изоморфен Unit (наверное)

_
10.12.2017
21:32:24
Error:(50, 73) Can't unquote Iterator[scala.collection.mutable.Map[String,AnyRef]], consider providing an implicit instance of Liftable[Iterator[scala.collection.mutable.Map[String,AnyRef]]]
tb.eval(q"$functionSymbol.function(${messages.iterator().asScala.map(_.asScala)})")
не знаете как исправить?
в scala worksheet компилится, в обычном коде нет

Eugene
10.12.2017
21:35:27

Oleg
10.12.2017
21:36:25
а что можно получить из Foo? и его тоже все могут породить

Eugene
10.12.2017
21:39:15
Весь hom-set этого типа - Куда его стрелки показывают то и можно получить

Oleg
10.12.2017
21:42:37
@ezhulkov @clayrat спасибо

Eugene
10.12.2017
21:46:49
@ezhulkov @clayrat спасибо
Хотя вот думаю и возможно Foo.type это тоже синглетон и терминальный объект. Их ведь может быть много в категории Set

Oleg
10.12.2017
21:49:03
когда-нибудь я узнаю значение слова на букву м

Eugene
10.12.2017
21:50:15

Oleg
10.12.2017
21:50:48
?
перед ним ещё много понятий

Eugene
10.12.2017
21:51:19
Монада чтоль?

Oleg
10.12.2017
21:51:30
ну да