@haskellru

Страница 397 из 1551
Index
11.09.2017
23:52:22
Хотя я называю эти директории lib и exe, для ясности.

Aleksey
12.09.2017
06:12:27
Можно в app класть собственно Main. И, скажем, описания CLI, парсер файлов конфигурации, вот это всё. И то только в том случае, когда пакет планируется использовать ещё и как библиотеку и не хочется засорять последнюю описанием опций командной строки конкретного приложения

Yuriy
12.09.2017
08:59:10
instance Monad m => Category (Kleisli m) в стандартной библиотеке — это представление категории монад в Хаскелле, которое вы тут ищете?

Google
Yuriy
12.09.2017
08:59:36
@strobegen ^

в случае со стэком можно вообще не использовать никакие темплэйты хочешь проект — echo {} > stack.yaml хочешь пакет — echo {} > project.yaml и дальше по подсказкам сборщика

Index
12.09.2017
09:02:27
@cblp_su категория Клейсли — это не категория монад

в категории монад объекты вроде Maybe, [], или State, а стрелки — type m ~> n = forall a. (Monad m, Monad n) => m a -> n a

в категории Клейсли объекты такие же, как в Hask (все типы в *), но стрелки Kleisli вместо ->

Evgeniy
12.09.2017
09:05:24
instance Monad m => Category (Kleisli m) в стандартной библиотеке — это представление категории монад в Хаскелле, которое вы тут ищете?
незнаю, возможно в том то и дело что я не до конца понимаю что ищу. Я знаю что не все все варианты adjunction возможно имплементировать в хаскеле тк некоторые функтуры завязанны на категории которые просто так не льзя описать используя type -> type. Собственно я и хочу осознать где проходит граница что можно делать а что нельзя

пока вот нашел такую архивную дискуссию на подобную тему https://mail.haskell.org/pipermail/haskell-cafe/2007-December/036340.html но еще не успел ознакомится

@cblp_su категория Клейсли — это не категория монад
а Eilenberg-Moore в отличии от Клейси как будет?

Index
12.09.2017
09:39:18
Не уверен, как лучше выразить T-алгебру (и возможно ли это в сегодняшнем Haskell).

Evgeniy
12.09.2017
09:55:35
а вообще ктонибудь видел чтобы https://hackage.haskell.org/package/adjunctions или adjunction из category-extracts использовалась для каких то практических задач а не только для того чтобы сделать что то типа http://chrispenner.ca/posts/adjunction-battleship?

ни как не могу найти место на ментальной карте для этого, с одной стороны штука сугубо теоритическая но с другой все же есть потенциально практические применения

Sherzod
12.09.2017
10:57:38
Чуваки, вам девушка не нужна?

Держите. Не благодарите!

Google
ParkeT
12.09.2017
10:58:49
Спасибо.

Aleksey
12.09.2017
10:59:05
(забрал стикеров)

Alex
12.09.2017
11:36:47
чот не раскрыты темы профункторов и гистоморфизмов

Sherzod
12.09.2017
11:37:35
Alex
12.09.2017
11:37:57
профунктор это бифунктор, контравариантный по первому параметру

Sherzod
12.09.2017
11:38:29
Alex
12.09.2017
11:38:38
а гистоморфизм это схема рекурсии учитывающая предыдущие результаты

https://jtobin.io/time-traveling-recursion

Sherzod
12.09.2017
11:39:44
а гистоморфизм это схема рекурсии учитывающая предыдущие результаты
то есть рекурсия, похожая на вычисление факториала?

Alex
12.09.2017
11:40:42
типа того но произвольной глубины

для факториала вроде бы достаточно параморфизма

Index
12.09.2017
11:42:04
Спасибо, так намного яснее стало.
Если это был сарказм, то можно и разъяснить

Дмитрий
12.09.2017
11:43:23
Про профункторы как раз таки было понятнее всего предыдущего)

Sherzod
12.09.2017
11:43:25
Если это был сарказм, то можно и разъяснить
Не понял, зачем для таких обычных вещей такие сложные слова придумывать

Index
12.09.2017
11:43:45
Что в них сложного?

Yuriy
12.09.2017
11:43:58
придумай слова попроще

Дмитрий
12.09.2017
11:44:11
Потому что это абстракция для которой уже давным давно закончились какие-то приземлённые аналогии

Index
12.09.2017
11:44:31
Да вроде и слово несложное

Дмитрий
12.09.2017
11:44:33
Примерно в этот момент и придёт понимание почему именно так а не проще

Google
Sherzod
12.09.2017
11:44:37
придумай слова попроще
профунктор это бифунктор, контравариантный по первому параметру ^ всё сложно Из всего только "функтор" в голову лезет. Объект, который можно вызвать (функтор в спп)

Yuriy
12.09.2017
11:44:40
можно говорить «плюшечка» вместо «профунктор», но это не сделает его понятнее

Дмитрий
12.09.2017
11:44:54
Контрплюшечка

Sherzod
12.09.2017
11:45:06
можно говорить «плюшечка» вместо «профунктор», но это не сделает его понятнее
конечно не сделает, потому что не отражает того что оно объясняет

Vasiliy
12.09.2017
11:46:22
> Из всего только "функтор" в голову лезет. Объект, который можно вызвать (функтор в спп) объект, который можно вызвать - функция, зачем придумывать такие сложные слова?

Sherzod
12.09.2017
11:46:47
Это не тот функтор
это не фпшный функтор, да.

Index
12.09.2017
11:46:50
@Epikur В качестве эксперимента могу объяснить, что такое функтор (не в C++, а у здоровых людей), что такое бифунктор, что такое ко/контравариантность, и как из этого вытекает определение профунктора. Но взамен ты предложишь объективно более подходящие термины, чтобы новичку сразу по названию стало ясно, о чем речь

Index
12.09.2017
11:47:23
А если не готов придумать, то зря только воду мутишь

Дмитрий
12.09.2017
11:47:42
Он готов потому что не представляет в чем проблема

Sherzod
12.09.2017
11:47:45
Ну очевидно что он этого не сделает)
вы обо мне плохого мнения :C

Index
12.09.2017
11:47:48
Бэкграунд опиши свой. Haskell на каком уровне знаешь?

ParkeT
12.09.2017
11:47:53
Вообще, для начала нужно курить теоркат. Но, для написания кода, это не обязательно.

Index
12.09.2017
11:48:04
Какой язык знаешь?

Sherzod
12.09.2017
11:48:08
книжку с солнышком пытался открыть

C#

Google
Дмитрий
12.09.2017
11:48:12
вы обо мне плохого мнения :C
P = PN тоже не докажешь, увы

Sherzod
12.09.2017
11:48:32
P = PN тоже не докажешь, увы
да, за меня это сделают другие, и вроде как уже сделали

Дмитрий
12.09.2017
11:48:38
))

Ясн

Alex
12.09.2017
11:48:42
не, там нашли фейл

ParkeT
12.09.2017
11:48:49
Sherzod
12.09.2017
11:48:55
не, там нашли фейл
ну тогда ждем след тысячалетия

Дмитрий
12.09.2017
11:49:06
Скорее !=
=, в этом и фича, про что я говорю

Index
12.09.2017
11:49:20
Ок, C#. Я его плохо помню, но попробую что-нибудь сообразить. Представь себе всякие контейнеры — списки, деревья, массивы, и т.д — штуковины хранящие в себе элементы.

Добавь в кучу опциональные значения (по сути список из 0 или 1 элемента)

Index
12.09.2017
11:50:02
Между ними общего то, что в них лежат элементы, и для них можно придумать функцию map, которая будет принимать делегат и применять к каждому элементу

Дмитрий
12.09.2017
11:50:08
Скорее !=
Нельзя придумать "понятные" термины если в языке просто кончились слова для подобных абстракций так же как нельзя доказать что PN = P, я в этом плане

Aragaer
12.09.2017
11:50:29
в доказательстве, что не равны, нашли фэйл. С другой стороны недавно проскочило, что задача про расстановку ферзей NP, но вроде как ее почти-почти решили, а это значит P=NP. Если я ничего не путаю

Index
12.09.2017
11:50:47
Ну да, и так сойдет.

ParkeT
12.09.2017
11:51:20
Не, forEach предполагает сайдэффект :(

Index
12.09.2017
11:51:21
Я ее запишу вот так: map : (a -> b, T a) -> T b, обозначая стрелочкой функцию, а заглавной T контейнер

Index
12.09.2017
11:52:03
На вход имеем преобразование элемента типа a в элемент типа b, на выход имеем новый контейнер (с новыми элементами)

Google
Sherzod
12.09.2017
11:52:58
это Select что ли? Потому как ForEach ничего не возвращяет

Index
12.09.2017
11:53:44
Оно сохраняет форму, т.е. если на вход дерево, то и на выход дерево

Evgeniy
12.09.2017
11:54:20
да Select больше похож

Index
12.09.2017
11:54:31
если ты туда передашь делегат x => x, то получишь на выход исходную штуковину.

Evgeniy
12.09.2017
11:54:36
Range(1, 10).Select(x => x * x);

выглядит как map

Index
12.09.2017
11:56:06
Так вот, для этой операции есть два закона во-первых, если сделаешь map функцией x => x, то получишь исходную структуру во-вторых, если сделаешь map f, а потом map g, где f и g это функции, то это равносильно тому, что ты сделаешь map (x => f(g(x)))

логично?

Sherzod
12.09.2017
11:56:38
нет

map (x => g(f(x))) так логично

Index
12.09.2017
11:57:26
ну да, да

Так вот, можно рассмотреть другие штуковины, кроме контейнеров, для которых возможно определить map

Например, можно сделать map одной функции на другую — это будет означать, что мы применяем их последовательно оба закона выполняются

"последовательно" в смысле, что результат одной передается в другую

Sherzod
12.09.2017
11:59:52
каррирование? (слышал такое умное слово)

Index
12.09.2017
12:00:19
я записывал тип map вот так: map : (a -> b, T a) -> T b мы можем в качестве T взять Tree, List, Array, что-нибудь еще там. А можем взять сами функции map : (a -> b, x -> a) -> (x -> b) я подставил x -> в качестве T

Sherzod
12.09.2017
12:00:23
как это выглядит? f.map(x => g)?

Страница 397 из 1551