
Semion
16.07.2017
16:19:17

kir
16.07.2017
16:19:39
> Только 1 из морфизмов А -> A
Как будто их там бесчётное множество :)
Если не всякие _|_, он там был бы один.

Vladislav
16.07.2017
16:45:23

Евгений
16.07.2017
16:45:35

Google

Vladislav
16.07.2017
16:45:38
в математическом смысле, по крайней мере

Евгений
16.07.2017
16:50:54
Например в Set только над пустым и одноэлементным множеством одна стрелка. Между остальными конечными множествами -- количество стрелок конечно, но больше единицы.
Количество стрелок из N в N уже континууально

Vasiliy
16.07.2017
16:54:59
не, то, что морфизмов A->A может быть сколько угодно - это понятно, но как может быть много id?
есть возможность различать их?
гм, впрочем, и (<> mempty) = id, и (mempty <>) = id

Евгений
16.07.2017
17:31:49
Насколько я понимаю есть среди higher category теоретиков движение "equality is considered harmful", но ни одной синтетической теории, в которой бы за основу вместо equality брался equivalence я не знаю
Даже в HoTT есть равенство


kana
16.07.2017
20:49:58
Folks, есть вопрос. Изучаю хаскель уже пару лет, знаком с лямбда-исчислением, поверхностно с теоркатом (только вчера доперло до меня, как работают ко- и про- функторы), есть пару проектов на кложе в проде, Elm юзал для пета, нет ни проекта на js бещ рамды и так далее.
Но вот сам по себе хаскель в проде никогда не использовал. И даже в петах, ничего такого, что можно было бы хотя бы на гитхаб выложить. Хочу написать что-нибудь на нем, не сильно крупное, но законченное и полезное. Какой-нибудь системный демон, тулзу, но нет никаких идей. Может кто помочь с идеями?

Igor
16.07.2017
20:50:19
о, kava, приветик. читаю твой паблик вконтакте.

kana
16.07.2017
20:50:39
Воу, привет
Известность

Denis
16.07.2017
20:50:57
шо за паблик?

Google

Igor
16.07.2017
20:51:13
https://vk.com/home_kana

kana
16.07.2017
20:53:05
Там в последнее время мало про фп, потому что комп сдох, а на работе я в основном с фронтом и реактом

Dan
16.07.2017
21:20:25

kana
16.07.2017
21:32:08
Для небольших компонентов/виджетов elm просто охуенен. Писать на нем целое большое приложение может быть больно

Leonid
16.07.2017
21:40:17
прежде чем на хаскеле писать надо ТК подтянуть конечно. без зигохистоморфного препроморфизма никак

? animufag ?
16.07.2017
23:05:17
Ну вроде это вполне распространенное мнение

Arseniy
16.07.2017
23:21:18
Это же троллинг был, нет?:/

? animufag ?
16.07.2017
23:21:59
ну да наверное
сам думал, что переспросить надо
блин теперь удалить сообщения хочется, но считаю это читерством

kana
18.07.2017
14:02:48
Попытался сделать функтор для типа * -> * -> *, где мапить нужно первый аргумент и понял, что я н самом деле ничего не знал про то, как работают тайпклассы и инстансы

Олег
18.07.2017
14:07:24
Оо, что за тема для синтаксиса?:)

kana
18.07.2017
14:08:05
Да дефолтная в vscode

Vasiliy
18.07.2017
14:10:31
это же Const, а фмап по первому аргументу - Data.Bifunctor.first

kana
18.07.2017
14:13:43
Да, знаю, Box тут для примера, про bifunctor знаю, мысль была сделать именно обычный функтор, где мапить нужно и можно только первый аргумент
Вообще на эту тему (тайп-левел лямды) тут хорошо рассказано - https://vk.com/doc121800070_448130477?hash=01f0b3b8e54ce8942a&dl=e99d741de34012c45f

Artyom
18.07.2017
15:20:45
а почему это до сих пор не в GHC? пейпер же из 2015

Dmitry
18.07.2017
15:26:32
В секции 7 написано, что там есть проблемы в совместимости с другими расширениями. А именно, MultiParamTypeClasses и PolyKinds.

Google

Artyom
18.07.2017
15:35:32
ну с поликайндами вроде просто implementation problems
наверно, ребятам было лень думать, как игнорить эти kind arguments
а с MPTC не знаю, наверно для экспериментального расширения прокатила бы какая-нибудь кривулька вроде ограничения на время поиска инстанса или даже “больше четырёх параметров в лямбде нельзя”

kana
18.07.2017
17:18:16
Можно ли автоматически вывести инстанс из другого инстанса?
Типа
instance Monad m => Functor (m a) where
fmap f m = m >>= return . f
То есть для все монады автоматически сделать и функторами, потому что монада вроде как не требует быть фурктором сама, на при этом железно таковой является
А, нет, таки требует через аппликатив, но для примера сойдет

Denis
18.07.2017
17:31:39
Есть же liftM и ap останется только монаду вывести

Nikita
18.07.2017
18:09:53
привет всем :)
мы недано выпустили поисковик
https://learn-anything.xyz/programming/programming-languages/haskell
интересно услышать мне про haskell карту

Дмитрий
18.07.2017
18:11:02
?

Nikita
18.07.2017
18:12:57
:D

kana
18.07.2017
18:21:29

Denis
18.07.2017
18:28:54
Может это уже что-то с зав типами связано

? animufag ?
18.07.2017
18:45:15
Там получится ситуация как в плюсах со специализацией. Есть общая имплементация и множество частных
Ну у меня была идея сделать DebugShow, который был бы обычным Show + ещё красивым, для некоторых частных случаев
Хотя до сих пор есть подозрение что это реально

Denis
18.07.2017
18:58:51
https://www.stackage.org/haddock/lts-8.23/base-4.9.1.0/Debug-Trace.html

Vasiliy
18.07.2017
19:00:01
Не, суть в том, что можно ли установить такую связь между тайпклассами, что если реализуешь один, то автоматически реализуешь и другой через первый.
Foldable и Traversable друг через друга выражаются, но там, вроде, просто в документации сказано, мол, реализуйте одно из двух, а то будет казус в виде _|_

Google

Vasiliy
18.07.2017
19:00:11
статической проверки нет

Denis
18.07.2017
19:00:35

Admin
ERROR: S client not available

Vasiliy
18.07.2017
19:18:16
ну да, делаем инстанс Traversable, а в инстансе Foldable используем foldMapDefault
только, почему-то, я был уверен, что Foldable с Functor автоматически порождает Traversable, а это, похоже, не так
а в Idris, кстати, можно в рамках одного mutual блока определять инстансы, соответственно, можно написать инстанс Monad и использовать его в определении fmap

Artyom
18.07.2017
19:25:11
а какой есть пример foldable+functor, но не traversable? сходу не вспоминается

Vasiliy
18.07.2017
19:27:42
дык, вроде, нет таких

Artyom
18.07.2017
19:28:24
тогда хочется разобраться, почему foldable+functor не порождает traversable

Vasiliy
18.07.2017
19:35:00
гм...
Traversable должен уметь воспроизводить свою структуру внутри аппликатива
Functor её сохраняет, а Foldable разрушает, так что используя только их написать traverse не получится
это так, сумбурные мысли вслух

Artyom
18.07.2017
19:47:42
ну вот например Natural -> a можно сделать Foldable и Functor легко, но в Traversable мы в куче случаев не сможем выдать никакого результата (например, если будем мапать a -> Maybe b)
я не уверен, правда, что это считается контрпримером
о, нагуглился контрпример
data Store r a = Store (r -> a) r

Denis
18.07.2017
19:55:19
это с линз?

Artyom
18.07.2017
19:55:57
не, это просто из какого-то поста

Denis
18.07.2017
19:57:11
ну это из комонад
https://www.stackage.org/haddock/lts-8.23/comonad-5.0.1/Control-Comonad-Store.html


Dead
18.07.2017
22:37:39
*очередной нуб врывается в тред*
Обозначу проблему. При множестве открытых статей, порог вхождения все равно так высок, что я не до конца понимаю основную область применения ЯП. А википедии так же абстрактны, как и сам язык. По этому хочу узнать суть из первых уст.
1. Какова основная область применения языка?
2. Эффективно ли использовать его в качестве основного?
3. Есть ли у haskell неоспоримые и "прощупываемые" сильные стороны?
4. Как именно вы используете haskell на практике?
Не кидайте камнями, я пытаюсь понять целесообразно ли вскрывать такую крупную область знаний, стоит ли того. Съедено много хабропостов и статей, первые главы популярных изданий, на всякий случай даже пробежался по исходникам в гите. Мне эстетически приятен функциональный стиль, в том же js и python, там это удобные инструменты в придачу к императивщине и ООП. Но если в питоне с первых уроков можно в файлы писать, то тут не ясно и сколько пробелов и где принято ставить, молчу уж про то, что самая яркая практика пока что - работа с треугольником.

Google

Arseniy
18.07.2017
22:52:14
Порог вхождения такой же, как в любой язык. Сравнимо с тем, как только начинаешь программировать в приципе. Просто проблема в том, что надо начать по другому думать несколько. Тогда будет как по маслу. Я когда начал фп, я изучал окамль и голову думал свихну. В какой-то прекрасный момент стало легче, чем любой другой яп.
А применение... Хе-хе
Думаю, @lightgreen ответит

Dead
18.07.2017
23:09:25
Да, при наличии мотивации голову повернуть можно под нужный градус. Вот только куда эти ваши монады эффективно сунуть :) за мотивацией в общем-то и пришёл.


Artyom
18.07.2017
23:16:19
> 1. Какова основная область применения языка?
бекенд вебдев какой-нибудь; компиляторы; блокчейна немало начинает писаться на хаскеле; банки разные используют хаскель; ну и вообще много чего. Нет основной области. (Сразу скажу: игры на хаскеле мало пишут, мобильные приложения мало разрабатывают, machine learning-ом вроде особо не занимаются, десктопных приложений тоже мало.)
> 2. Эффективно ли использовать его в качестве основного?
зависит от того, чем ты хочешь в жизни заниматься. Для бекендов, наверно, эффективно. Хз. Я сам не знаю. Мне нравится писать десктопные приложения, где safety не особо важна; для них, наверно, не особо эффективно, но учить другой язык лень. Для фронтенда есть Purescript, он похож на хаскель, но насколько там эффективно по сравнению с JS – без понятия. Думаю, что чем больше ты хочешь надёжности от своей программы, тем эффективнее будет.
> 3. Есть ли у haskell неоспоримые и "прощупываемые" сильные стороны?
парсеры писать легко. Код рефакторить очень легко. Проще, чем в других языках, рассуждать о том, что делает код (особенно с системой типов, которая не ущербная, и с всякими плюшками типа ADTs). Зелёные потоки есть (ну ок, это не только в хаскеле).
https://github.com/Gabriel439/post-rfc/blob/master/sotu.md – вот здесь можно почитать, для чего хаскель хорошо подходит
наконец, это фича скорее комьюнити, а не языка, но вокруг хаскеля есть много людей, которым интересна теория типов и теория категорий, так что если тебе тоже интересны эти вещи, то, наверно, тебе хаскель и околохаскельный ресёрч понравится
> 4. Как именно вы используете haskell на практике?
я вон в серокеле¹ пишу криптовалюту² (опенсорсную, можешь потыкать в код). Ещё там сайтики какие-то по мелочи для себя. (Криптовалюту пусть @jagajaga пиарит, я уже спать хочу.)
¹ serokell.io
² https://github.com/input-output-hk/cardano-sl/
> Не кидайте камнями, я пытаюсь понять целесообразно ли вскрывать такую крупную область знаний, стоит ли того.
ну некоторые говорят, что им хаскель помогает, даже если они его не используют – меняет образ мышления и всё такое. Я у себя такого не заметил, но, может, я просто невнимательный. А так можно попробовать месяц поизучать хаскель и посмотреть, понравится или нет.
> Но если в питоне с первых уроков можно в файлы писать
можешь в личку написать и я тебе расскажу, как в хаскеле в файлы писать и даже гуи сделать
спойлер: writeFile "file.txt" "this string goes to the file" ?
> то тут не ясно и сколько пробелов и где принято ставить
установи hindent и он решит вопрос с пробелами за тебя
без hindent, к сожалению, никто из новичков почему-то не ставит пробелы нормально ?
но, с другой стороны, это не очень-то и важно, если подумать
> молчу уж про то, что самая яркая практика пока что - работа с треугольником.
что за треугольник?
> Вот только куда эти ваши монады эффективно сунуть :)
ну я хаскель не за монады люблю, а за то, что там логично сделаны простые и базовые вещи
— функции можно передавать как аргументы
— удобный overloading через тайпклассы
— типы есть
— ADTs есть
— нормальный полиморфизм, а не “чтобы сделать <простую вещь>, юзайте <страшные генерики>”
— и так далее


Dead
18.07.2017
23:26:17
Большое спасибо, так стало по лучше. Код - небольшое хобби, не основная деятельность. Haskell давно на горизонте маячит, но недавно его так и порекомеедовали, мол "для здоровья полезно изредка засесть". Так что поучу, может действительно пригодится где.

Aleksey
19.07.2017
00:56:01
Друзья сколько у вас весил самый большой бинарник с программой на haskell?

Artyom
19.07.2017
00:59:06

Aleksey
19.07.2017
01:22:10

Artyom
19.07.2017
01:24:03
флаги не знаю
вряд ли флаги что-то сильно поменяют, основной профит от strip+upx
но если кто-то знает какие-то флаги, мне тоже интересно
а, инлайнинг можно отключить, наверно
но тогда медленнее будет, возможно намного

Aleksey
19.07.2017
01:27:14
Это что-то наподобие этого?
strip -p --strip-unneeded --remove-section=.comment -o hello-small hello

Aleksey
19.07.2017
05:07:24
Не надо отключать инлайнинг! Это вам не хелловорлд на сишечке! Сэкономите полкопейки (и то не факт), но сильно испортите производительность