
Kelin
25.09.2017
18:46:34
Ну потому что это пиздец
Некоторые моменты жутко неудобные
+ lodash/fp по-тупому срет в бандл

Дмитрий
25.09.2017
18:46:51
Ага

Kelin
25.09.2017
18:47:12
сколько методов ни подключи, все равно тянет все (именно фп-версия)

Gleb
25.09.2017
18:47:15
Там есть рекомендации чтобы не срал

Google

Kelin
25.09.2017
18:47:24
там огромный кусок подгружается, который походу обычный лодаш тянет или я хз

Дмитрий
25.09.2017
18:49:09

Kelin
25.09.2017
18:50:19

illiatshurotshka❄️
25.09.2017
18:53:52
красиво

Kelin
25.09.2017
18:55:19
Да
По итогу метод, который весит 2кб, все равно лишних 20 срет

? animufag ?
25.09.2017
18:57:59

Kelin
25.09.2017
18:58:14

Диёр
25.09.2017
18:58:18
СВЯТЫЕ ОГУРЦЫ ЧТО ЭТО

Kelin
25.09.2017
18:58:37

Denis
25.09.2017
19:09:16
@kelin2025 также можно же без рамды (...args) => f(args)

Google

Kelin
25.09.2017
19:09:34

Denis
25.09.2017
19:09:48
ох поинтфри любители)

kana
25.09.2017
19:22:11
идем от обратного, нужен метод, который принимает массив и функцию и делает спред аргументов. Называется она apply, если даже в стандартной либе жс. Значит нам нужна обратная функция, и имя ей - unapply, именно так в рамде она и называется:
unapply(id)(1, 2, 3) === [1, 2, 3]

Kelin
25.09.2017
19:25:00

illiatshurotshka❄️
25.09.2017
19:25:11
вариадик аргументы не имеют же смысл в фп?

Kelin
25.09.2017
19:25:18
есть же pipe

kana
25.09.2017
19:25:56
ну pipe просто устоялся с очень давних пор, еще со времен юниксовых шелов, а может и раньше

Kelin
25.09.2017
19:27:43
ну вот
я ж не могу знать
вдруг у них тоже вместо unapply что-то устоявшееся

kana
25.09.2017
19:29:26
вообще конечно правильно было бы назвать функцию curry, а apply - uncurry, но имя curry уже забито другой функцией, котоую я бы назвал autocurry или makeCurriable

Denis
25.09.2017
19:31:43
нет
потому что это для Tuple а не для variadic

kana
25.09.2017
19:32:30
в рамде массивы используются как кортежи в некоторых местах

Denis
25.09.2017
19:32:34
f (a, b) -> f a b
f a b -> f (a, b)
чушь какая)

kana
25.09.2017
19:34:21
смысл методов curry/unccury не в кортеже, ты путаешь следствие и причину. Смысл этих методов - превратить функцию, которая принимает много аргументов, в функцию, которая принимает один, и наоборот. А кортежи там или массивы, захордкорены ли их длины - это уже частные реализации, хаскель не эталон)

Denis
25.09.2017
19:35:30

kana
25.09.2017
19:35:48
ЛИ сам по себе ни про какие curry не знает, там как раз частная реализация в контексте ЛИ. У нас ЖС, контекст другой, правила другие, но смысл и назначение те же самые

Дмитрий
25.09.2017
19:42:43
Н Е К А Н О Н!1! ??

Google

Kelin
25.09.2017
19:46:05
Во, ебать, в 2 раза укоротил
красота

Denis
25.09.2017
19:49:54
?

Kelin
25.09.2017
21:07:46
Размер
Блэт бэндла

andretshurotshka?❄️кде
26.09.2017
03:04:04
Еее


kana
26.09.2017
07:36:49
Шла тут тема про линейные типы, это вводный пост
Исчисление секвенций
(полная Markdown-версия поста: http://bit.ly/2xyEgBS)
Я начинаю серию постов про линейную логику и всякие крутые штуки, которые на ней основаны (изначально всё это задумывалось чтобы плавно подвести к линейным типам). Но прежде чем начать писать про саму линейную логику, нужно сказать пару слов о секвенциальном исчислении, через которое, как правило, определяется линейная логика.
Итак, исчисление секвенций — система формального вывода формул, в основе которой лежит выводимость одних формул из других.
Секвенцией называется отношение выводимости одной последовательности утверждений из другой.
Обозначения:
- A, B, C и т. д. — утверждения.
- На утверждениях заданы операции: &, |, ¬.
- Γ, Δ, Θ и т. д. — конечные последовательности утверждений.
- Γ ⊢ Δ — секвенция (Δ выводимо из Γ).
- A → B — импликация (определяется как ¬A | B).
- α, β, γ и т. д. — произвольные термы.
- a, b, c и т. д. — переменные.
- Переменная в формуле называется свободной если она встречается вне области действия квантификаторов: ∀ и ∃.
- A[τ/x] — замена в A переменной x на терм τ.
Правила вывода доказательств
Правила вывода в секвенциальном исчислении делятся на структурные и логические. Почти все правила имеют левую и правую версии (то есть обладают некоторой симметрией относительно знака ⊢).
Аксиома индентичности
Любое утверждение выводится из себя же:
A ⊢ A
Сечение
(⊢ Α, Γ) & (⊢ ¬Α, Δ) ⇒ ⊢ Γ, Δ
Логические правила
Конъюнкция слева и дизъюнкция справа
Запятая слева от знака ⊢ "переводится" в &, справа — в |:
Γ, Α ⊢ Δ ⇒ Γ, Α & B ⊢ Δ
Γ, B ⊢ Δ ⇒ Γ, Α & B ⊢ Δ
Γ ⊢ A, Δ ⇒ Γ ⊢ A | B, Δ
Γ ⊢ B, Δ ⇒ Γ ⊢ A | B, Δ
Дизъюнкция слева и конъюнкция справа
Эти правила отражают дистрибутивность конъюнкции секвенций:
(Γ, A ⊢ Δ) & (Θ, B ⊢ Λ) ⇒ Γ, Θ, A | B ⊢ Δ, Λ
(Γ ⊢ A, Δ) & (Θ ⊢ B, Λ) ⇒ Γ, Θ ⊢ A & B, Δ, Λ
Импликация
(Γ ⊢ A, Δ) & (Θ, B ⊢ Λ) ⇒ Γ, Θ, A → B ⊢ Δ, Λ
Γ, A ⊢ Δ ⇒ Γ ⊢ A → B, Δ
Отрицание
Утверждения можно переносить с изменением знака из левой части секвенции на правую и наоборот:
Γ ⊢ A, Δ ⇒ Γ, ¬A ⊢ Δ
Γ, A ⊢ Δ ⇒ Γ ⊢ ¬A, Δ
Квантор всеобщности
Γ, A[τ/x] ⊢ Δ ⇒ Γ, ∀x. A ⊢ Δ
Γ ⊢ A[y/x], Δ ⇒ Γ ⊢ ∀x. A, Δ
Квантор существования
Γ, A[y/x] ⊢ Δ ⇒ Γ, ∃x. A ⊢ Δ
Γ ⊢ A[τ/x], Δ ⇒ Γ ⊢ ∃x. A, Δ
(в правилах для кванторов всеобщности и существования подразумевается, что переменная y не является свободной в Γ и Δ)
Структурные правила
Ослабление
Если секвенция истинна, то к её левой и правой частям можно добавлять утверждения, не повлияв на истинность:
Γ ⊢ Δ ⇒ Γ, A ⊢ Δ
Γ ⊢ Δ ⇒ Γ ⊢ A, Δ
Сокращение
Повторяющиеся элементы последовательности можно сократить:
Γ, A, A ⊢ Δ ⇒ Γ, A ⊢ Δ
Γ ⊢ A, A, Δ ⇒ Γ ⊢ A, Δ
Перестановка
Перестановка утверждений в последовательности не влияет на выводимость:
⊢ Γ ⇒ ⊢ Γ'
(Γ' — перестановка Γ)
Субструктурные логики
Если убрать или ограничить какое-то из структурных правил, получим субструктурную логику. Субструктурными, например, являются линейная логика и афинная логика, о которых и пойдёт речь в следующих постах.


andretshurotshka?❄️кде
26.09.2017
07:38:44
норм

Kelin
26.09.2017
07:40:10
Че за пиздец

kana
26.09.2017
07:42:18
Заметьте, что автор поста уже не я. Я к тому, что если кому-то хочется что-то опубликовать своё на тему фп или математики, то это можно делать в моем канале)
Но чёт я в многие логические правила не въезжаю

Даниил
26.09.2017
09:40:43
На самом деле в следующем посте эти правила (только дополненные для линейной логики) будут применяться для доказательства всяких простеньких лемм, тогда думаю проще будет понять, на практике.

andretshurotshka?❄️кде
26.09.2017
12:50:00
опять 299 человек ? ливают что ли

kana
26.09.2017
12:53:25
Да, позавчера были те же 299

Алексей
26.09.2017
12:53:42
Спугиваете народ ?

andretshurotshka?❄️кде
26.09.2017
12:53:51

Алексей
26.09.2017
12:54:11

kana
26.09.2017
12:55:17
Люди приходят про редакс и рх почитать, а тут логика и линзы

Gleb
26.09.2017
12:55:41
rx тут тоже самтаймс

Google

.
26.09.2017
12:55:57
Линзы в тему же чо вы. Оптика вообще актуальна


kana
26.09.2017
12:57:25
Вот тогда немного самописной оптики. За правильность не ручаюсь, но вроде никто не исправлял ничего, если кто-то читал
Но вот словесносное описание, писал в одной конфе:
Линза - не пара из геттера и сеттера. Это ТОЛЬКО идентити, который еще запаковывает значение. Но обобщенный, то есть функции применяется к значениям не напрямую, а через функторы (что дает нам возможность внести в этот процесс идентити какой-то эффект, например изменение).
Итак, что делает линза, основанная на геттере и сеттере:
Линза принимает некую функцию pure', которая просто маленькое значение заворачивает в функтор (переносит в эффектфул мир). Далее линза принимает большое значение. С помощью геттера вытаскивает из него маленькое значение, переносит его в функтор через pure'. А потом применяет в эффектфул-мире (fmap) сеттер к объекту.
То есть в прямом смысле вытащили значение и внесли его обратно, но сделали это в внутри функтора.
И вся магия в том, что с помощью разных функторов и pure' можно делать разные вещи. Например, если сама по себе линза - такой идентити модификатор, то если отправить в нее конструктор функтора, который перед этим еще применяет к значению какую-нибудь функцию, то получится over.
А если использовать Const, который позволяет обернуть значение в функтор, но потом не дает ничего с ним сделать через fmap, то на выходе мы получим контейнер с нетронутым маленьким значением внутри. Это view.


? animufag ?
26.09.2017
12:58:19
а можно в гисте
а то главзами искать неудобно

Admin
ERROR: S client not available

kana
26.09.2017
12:58:34
Окей, через минут 30, когда поем

? animufag ?
26.09.2017
12:58:45
кк

illiatshurotshka❄️
26.09.2017
13:00:44
что за эффектфул мир?

kana
26.09.2017
13:02:30
Это такой же чистый мир, просто через обертки, которые могут делать что-то неочевидное) Ну, именно так я это понимаю. Это функторы, монады, аппликативные, траверсалы

Denis
26.09.2017
13:02:31
Категория Клейсли

illiatshurotshka❄️
26.09.2017
13:02:57
а

kana
26.09.2017
13:22:00
@vlastachu
https://gist.github.com/kana-sama/c12843b2c940419b3dff156761c3c446

? animufag ?
26.09.2017
13:24:40
да сложновато для инструмента с такой простой целью
кстати помню был чел https://artyom.me/lens-over-tea-1
довольно забавно писал

kana
26.09.2017
13:26:00
ну по идее либы разрабатываются так, чтобы их можно было использовать без понимания того, как они работают внутри
почему-то в хаскеле так не получается

illiatshurotshka❄️
26.09.2017
13:32:33
разве так не будет в любом языке с возможностью создать такие структуры?

Google

Kelin
26.09.2017
13:48:37
Обожаю преподов сука
- о, у тебя во введении 4 слова красивых, скажи, что там написано
Ну сказал крч
- нет, неправильно. У тебя там было написано, что первый язык функционального программирования - лисп
- в смысле?? Это не 4 слова, и даже не введение
- а, ну да, сорян, мой косяк
@@@
в конец очереди
@@@
а, время, я домой пошёл

Aleh
26.09.2017
13:52:29
какой-то поток сознания

Kelin
26.09.2017
13:53:02
Пригорел просто

? animufag ?
26.09.2017
13:53:56
напомнило тау
сидишь с расчётами (довольно простыми но сам предмет хз о чём)
ждёшь пару часов, предпод молча рисует вопросительные знаки на твоей распечатанной работе (только печатать можно)
спрашиваешь его в чём проблема – он говорит что проблема в тебе (ему вообще поссать на твоё мнение сейчас, ведь ты пропускал его лекции)
идёшь и пытаешься с пацанами выяснить что было не так.

Дмитрий
26.09.2017
13:54:10
Обожаю преподов сука
- о, у тебя во введении 4 слова красивых, скажи, что там написано
Ну сказал крч
- нет, неправильно. У тебя там было написано, что первый язык функционального программирования - лисп
- в смысле?? Это не 4 слова, и даже не введение
- а, ну да, сорян, мой косяк
@@@
в конец очереди
@@@
а, время, я домой пошёл
Классика

.
26.09.2017
13:55:02

Kelin
26.09.2017
13:55:12
А потом удивляются, почему говорят, что вузы нахуй не нужны

Дмитрий
26.09.2017
13:55:28

? animufag ?
26.09.2017
13:55:32
ну вот эта инженерная херня примерно одинаково проходит

Kelin
26.09.2017
13:55:39
Это я ещё успел перепилить отчёт по госту

.
26.09.2017
13:56:03

Aleh
26.09.2017
13:57:02
на экзамене покричал на меня в духе “я начальник, ты дурак” и выгнал с минимальной оценкой

? animufag ?
26.09.2017
13:58:07
ну да зачастую не понимал дурачков которые пишут конспекты
за исключением тех ситуаций где профит от конспекта заранее оговаривался преподом

Дмитрий
26.09.2017
13:58:45

Aleh
26.09.2017
13:58:46
да как бы ок, если удобнее писать конспект, то ради бога. Мне неудобно

Дмитрий
26.09.2017
13:58:54
Сдал потом диплом на 5