
Index
12.09.2017
12:00:58
и раскрывается в x => g (f x)

ParkeT
12.09.2017
12:01:02
хорошая статья "Monads are trees with grafting"

Sherzod
12.09.2017
12:01:29
Стоп

Index
12.09.2017
12:01:46
В общем в этой концепции главное понять, что мы можем рассматривать выходные данные функции как вещь, к которой применяется map

Google

Evgeniy
12.09.2017
12:01:46
еще можно это представить в уме как дженерик функция которая оперирует над другими дженериками
( там где T есть Tree, List, Array...)

Index
12.09.2017
12:03:32
Вот рассмотрим массив ["a", "b", "c", "d"]. В нем по индексу 0 находится "a", по индексу 1 находится "b", etc
Сделали map (x => x + "!"), получили ["a!", "b!", "c!", "d!"] (если в C# через + конкатенация строк, я не помню)
А теперь рассмотрим функцию гипотетическую toHex, которая из инта дает строчку — 0 в 0x0, 10 в 0xA, etc

Sherzod
12.09.2017
12:04:41
ок

Index
12.09.2017
12:04:59
Сделаю я по ней map (x => x + "!") и получу функцию, которая из инта дает строчку — 0 в 0x0!, 10 в 0xA!, etc
В этом плане мы можем рассматривать входные данные как индексы, а выходные как элементы
а функцию как бесконечную структуру

Sherzod
12.09.2017
12:05:38
начальный массив [0, 10, ...]? toHex.map(x => x + "!") так?

Index
12.09.2017
12:06:45
Нет, какой начальный массив? Я уже рассматриваю гипотетическую функцию toHex, а не массив
и провожу аналогию, что она как бесконечный массив

Evgeniy
12.09.2017
12:06:59
тут есть разница между тем приминить map на функцию или на результат ее выполнения

Google

Sherzod
12.09.2017
12:07:11
почему она бесконечный массив?

Index
12.09.2017
12:07:11
["0x0", "0x1", "0x2", ... "0xA", "0xB", ... ]
потому что по индексам содержит hex-строчки
даешь ей индекс, получаешь строчку

Sherzod
12.09.2017
12:07:34
индексы откуда?

Index
12.09.2017
12:07:42
входные данные
ты же ей на вход передаешь число

Yuriy
12.09.2017
12:08:06
я предпочитаю объяснять функторы через Maybe, Either, Reader, а только потом функции

Sherzod
12.09.2017
12:08:14
как это должно выглядеть в итоге

Index
12.09.2017
12:08:21
Reader и есть функция @cblp_su
а Maybe и Either это тривиальные случаи контейнеров

Sherzod
12.09.2017
12:08:46

Yuriy
12.09.2017
12:08:51

Vasiliy
12.09.2017
12:09:19
я норм залечил гошнику про функторы на примере гошных указателей и слайсов

Yuriy
12.09.2017
12:09:32

Index
12.09.2017
12:09:55
как это должно выглядеть в итоге
Имеем toHex, это функция из интов в строчки
toHex(0) = "0x0"
toHex(1) = "0x1"
...
toHex(10) = "0x10"
Это можно представить как бесконечный массив, по индексу 0 лежит "0x0", по индексу 10 лежит 0x10
Я не знаю, вроде простая идея

Yuriy
12.09.2017
12:10:14

Sherzod
12.09.2017
12:10:23

Index
12.09.2017
12:10:37
toHex.map(x => x + "!") даст нам другой "бесконечный массив", в котором уже все строчки содержат "!" на конце

Google

Index
12.09.2017
12:10:55
так же как someArray.map(x => x + "!") просто замапит обычный массив и даст новый массив

Sherzod
12.09.2017
12:11:41

Index
12.09.2017
12:11:49
Да

Yuriy
12.09.2017
12:12:30
(а в математике (теории множеств) массив определяется как раз как функция из [1..n])

Sherzod
12.09.2017
12:13:32
функция из отрезка?

Index
12.09.2017
12:13:37
Вот, вроде разобрались с map на массивах, деревьях, функциях. В общем, штуковины которые поддерживают map вот таким образом являются функторами (если быть точнее, то эндофункторами в определенной категории, но это я сейчас точно не объясню)

Yuriy
12.09.2017
12:14:01

Sherzod
12.09.2017
12:14:27

Yuriy
12.09.2017
12:15:09

Index
12.09.2017
12:15:51
@Epikur Функция — это отображение одного множества на другое. Нет никакой причины, по которой первое из множеств должно быть действительными числами (отрезок, как ты предположил), а не натуральными.

Sherzod
12.09.2017
12:16:09

Alex
12.09.2017
12:16:43
функция между двумя множествами

Sherzod
12.09.2017
12:16:53

Yuriy
12.09.2017
12:16:57

Index
12.09.2017
12:17:14
Да

Alex
12.09.2017
12:17:22
может быть функция которая сопоставляет каждое яблоко соседнему

Yuriy
12.09.2017
12:17:56

Alex
12.09.2017
12:18:05
или функция которая сопоставляет яблоко его весу

Sherzod
12.09.2017
12:18:24
Окей
Я уже понял что даже функтор простыми словами не могу объяснить

Google

Yuriy
12.09.2017
12:18:53

Alex
12.09.2017
12:19:10
массив индексированный яблоками чо

Index
12.09.2017
12:19:21

Sherzod
12.09.2017
12:19:24
Но то что Алекс Грызлов пишет... Какой-то рокет сайенс
Сейчас еще раз его сообщение прочитаю

Alex
12.09.2017
12:19:49
категори саенс

Yuriy
12.09.2017
12:20:09

Alex
12.09.2017
12:20:30
короч функторы это обобщение функций а профункторы это обобщение реляций

Sherzod
12.09.2017
12:21:12
Реляция - это связи?

Alex
12.09.2017
12:21:43
типа как в базе данных

Index
12.09.2017
12:21:48
@clayrat Первое понятно (функции это функторы на тонких^W дискретных категориях), а второе можно пояснить?

Alex
12.09.2017
12:22:48
https://bartoszmilewski.com/2016/07/25/profunctors-as-relations/

Yuriy
12.09.2017
12:23:12

Index
12.09.2017
12:23:19
thin category

Sherzod
12.09.2017
12:23:23
и что с этими гистаминовыми функторами делают?

Index
12.09.2017
12:23:26
никаких стрелок кроме id

Alex
12.09.2017
12:23:29
https://ncatlab.org/nlab/show/thin+category

Index
12.09.2017
12:24:00
черт
я имел в виду дискретные значит(?)
да, точно

Google

Index
12.09.2017
12:24:29
прошу прощения, функции — это функторы на дискретных категориях

Sherzod
12.09.2017
12:24:47
зачем всё это нужно?

Alex
12.09.2017
12:24:59
чтобы абстрагировать математику

Sherzod
12.09.2017
12:25:05
с иммутабельностью и Option<T> понятно

Alex
12.09.2017
12:25:08
типа сопоставлять тервер с топологией
теоремы не доказывать одинаковые по многу раз

Sherzod
12.09.2017
12:25:51
а какой профит в этом?

Alex
12.09.2017
12:26:12
для математиков есть
и хардкорных фпшников
типа кметта

Sherzod
12.09.2017
12:26:36
кметта это человек?

Index
12.09.2017
12:26:44
Edward Kmett

Alex
12.09.2017
12:26:52
https://www.linkedin.com/in/ekmett

Sherzod
12.09.2017
12:29:06
Он приложухи для брокеров пишет?
Для уолстрит?

Alex
12.09.2017
12:29:17
бекенды скорее

Yuriy
12.09.2017
12:29:51
я тут на днях слушал доклад Конала Эллиотта про то, как он умеет трансформировать программный код в произвольную категорию (категории скорее в хаскелльном смысле, чем в математическом) http://conal.net/papers/compiling-to-categories/compiling-to-categories.pdf
по-моему, самое понятное практическое применение ТК, а именно:
программный код, функции образуют категорию. давайте отобразим её на любую другую

Alex
12.09.2017
12:30:17
вообще теоркат для программистов как по мне надо начинать с линейной алгебры
правда моноидальное толком мапится только на линейнообразные типы

Sherzod
12.09.2017
12:30:36
А вот это я:
https://www.linkedin.com/in/sherzod-mutalov-817212a6/
Хорошо, будут ва стикеры с профункторами и гистограммами

Alex
12.09.2017
12:31:29
а я https://www.linkedin.com/in/alexgryzlov/