Программирование


Ответить в тред Ответить в тред

<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
315 33 114

Хаскель Тред - ньюфаг едишн /haskell/ Банан 07/02/19 Чтв 00:29:03 13431351
image.png (43Кб, 1200x847)
1200x847
Что читать? Я ебу, сам через жопу читаю вот это:
http://learnyouahaskell.com/chapters
Походу, я единственный и не очень умный вкатывальщик в этот странный язык.
Банан 07/02/19 Чтв 00:30:56 13431362
ну и первый вопрос - этот костыль можно делать или есть более элегантное решение?
Банан 07/02/19 Чтв 00:31:22 13431373
image.png (9Кб, 449x73)
449x73
пикча отклеилась
Аноним 07/02/19 Чтв 00:35:38 13431384
Для души Haskell School of Expression
Для дела Real World Haskell
Банан 07/02/19 Чтв 00:57:44 13431435
image.png (94Кб, 940x1026)
940x1026
image.png (50Кб, 940x508)
940x508
Вопрос по созданию простейшей хуйни на функиональщине. Вот я захотел сделать телеграм бота, но так как в ФП я вообще не шарю, решил сначала продумать базовую архитектуру: в боте есть список аккаунтов, инфа в которых постоянно меняется. На императивном языке я бы просто поменял пару параметров, но тут пришлось использовать "костыль" в виде рекурсии и пересоздания списка. на пике 2 неработающая, но читабельная версия. Разве это не громоздко? Мне кажется, я делаю хуйню.
>>1343138
или мне лучше вместо таких тупых вопросов почитать книжки, где обьясняется, как мыслить функционально?
Аноним 07/02/19 Чтв 01:03:07 13431446
>>1343143
Эти почитай, будет проще
Аноним 07/02/19 Чтв 01:48:48 13431537
О! Только хотел пойти в общий тред, а тут тред запилили!
Ещё один вкатывающийся заворачиватель Hello World во все монады по очереди.

Видел мануал, где начинают не с описания няшных типов и классов, а с хардкорного main = do <in out operations> хоть как-то похожего на реальные задачи. Не могу вспомнить название, может анон доставит?
Аноним 07/02/19 Чтв 07:52:01 13431838
>>1343137
Есть расширение GHC `DuplicateRecordFields`, ещё есть линзы и `mkFields`
Аноним 07/02/19 Чтв 07:55:31 13431849
>>1343137
Есть расширение GHC `DuplicateRecordFields`, ещё есть линзы и `mkFields`
Аноним 07/02/19 Чтв 10:22:17 134321410
>>1343135 (OP)
Если совсем нубас, то пройди курс на степике от Дениса Москвина, он сейчас, вроде-бы, в свободном доступе.
Аноним 07/02/19 Чтв 10:41:41 134322011
>>1343143
Костыль-то зачем сделол? Рекорды можно юзать так же как и нерекорды: data A a = A {x::a, y::a}; A {x = 1, y = 2} === A 1 2. Иль ты решил сокрыть стандартный конструктор и в будущем сделоть умный конструктор?

Во-первых parse у тебя неправильно называется, это splitWithSpace, во-вторых перемудрил, в-третьих есть стандартные функции для разделения строки.

В onMessage у тебя бизнес-логика, лень разбираться.
Аноним 07/02/19 Чтв 15:15:18 134340912
>>1343137
>klass
>fName
Просто убей себя.
Аноним 07/02/19 Чтв 22:18:37 134365913
>>1343409
ебать ты токсичный. Лучше бы показал как надо
Аноним 08/02/19 Птн 09:58:22 134380314
a714d77f56b8926[...].jpg (52Кб, 740x740)
740x740
В хачкиле самое сложное это его установка, блядь. Установить чтото по мануалам просто нереально. Cabal mamuebal install zaloopa-1.0.3 @ error блабла. Вроде разобрался со стеком и использованием lts, слава яйцам, вне стека хачкель неработоспособная параша.
Аноним 08/02/19 Птн 16:02:11 134402615
>>1343135 (OP)
ПАЦАНЫ, Я СЕГОДНЯ ШЁЛ КОРОЧЕ ПО ГОРОДУ И УВИДЕЛ ЧЕЛА В МАЙКЕ ">>=", НУ Я ПОДСКОЧИЛ И РЕЗКО ПЕРЕЕБАЛ ЕМУ В ЩЩИ С ВЕРТУШКИ И ПОЯСНИЛ ЕГО КРИКОМ "НЕ ЛЮБЛЮ МОНАДЫ", ПОТОМУ ЧТО Я УГОРЕЛ ПО ЛИСПУ, ПАЦАНЫ ДУХ СТАРОЙ ШКОЛЫ ЖИВЁТ ТОЛЬКО В НАСТОЯЩЕЙ ФУНКЦИОНАЛЬЩИНЕ, ГДЕ ЕБАШАТСЯ ПО ХАРДКОРУ, ГДЕ ПАЦАНЫ ЖИВУТ МЕТАПРОГРАММИРОВАНИЕМ, ИНТЕРАКТИВНОЙ РАЗРАБОТКОЙ И ЕБУТ СИСТЕМУ В РОТ! ТОЛЬКО ЛИСП ТОЛЬКО ГОМОИКОННОСТЬ, ТОЛЬКО СКОБКИ!!! ЮНИТИ УЛЬТРАХАРДКОР ЛИСП!!! пацаны ебашьте скалоблядей, эфшарперов, крестовиков, формошлепов, академиков, угарайте по метарекурсии любите Лисп, репл и Скобки! ГОВОРИТЕ ОТКРЫТО И СМЕЛО ПРЯМО В ЛИЦО! ЛИСП!
Аноним 09/02/19 Суб 22:53:19 134484416
Аноним 09/02/19 Суб 23:39:45 134486917
>>1343135 (OP)
На сайте хаскеля есть список книг, курсов и всего такого

https://www.haskell.org/documentation

У них вообще хороший сайт. https://www.haskell.org

Там еще есть вики

https://wiki.haskell.org/Haskell

А еще есть hoogle, замечательная штука, там можно икать документацию для модулей и функций, причем не только по имени, но и только по типам, очень удобно

https://www.haskell.org/hoogle/
Аноним 09/02/19 Суб 23:42:07 134487118
Как на этом языке написать что-то юзабельное?
Аноним 10/02/19 Вск 09:23:40 134495019
Аноним 10/02/19 Вск 09:31:48 134495520
>>1343137
Зачем тебе еще один конструктор? У тебя уже есть
Account :: [Char] -> Int -> Account
можешь прям так и писать:
let
vasya = Account "xXxNagibat0RxXx" 7
petya = Account "~~n00pPWNR666~~" 6
in ktoChyuMamkyEbal vasya petya
Аноним 10/02/19 Вск 09:37:37 134495721
>>1343183
Это же нуботред, пусть хоть до функторов и монад дойдет сначала.
Аноним 10/02/19 Вск 09:48:25 134495922
>>1343143
> "костыль" в виде рекурсии и пересоздания списка
Если я тебя правильно понял, то это не костыль, а идиоматичный подход с использованием иммутабельных структур данных (например, https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf - "Purely Functional Data Structures" Chris Okasaki).

Используй https://www.haskell.org/hoogle/ для поиска функций по типам, большая часть того что ты написал уже реализована и оптимизирована.

Для простейшего парсинга лучше использовать Data.Text, там можно и делить строки по символам и выдавать подстроку и все остальное.
Аноним 10/02/19 Вск 10:14:36 134496423
Аноним 10/02/19 Вск 12:30:05 134499524
>>1344964
Я сказал юзабельное, а не очередной туториал, библиотеку для хаскелла, учебное задание по туториалу, байндинг.
Т.е. чтобы конечный пользователь, нихера не знающий про хаскелл запустил программу для своих нужд, а она на хаскелле написана?
Что вообще на нём кошерно писать?
Аноним 10/02/19 Вск 12:42:52 134500125
Аноним 10/02/19 Вск 18:27:08 134522926
>>1344995
Pandoc есть, например; эта контора https://www.tweag.io/ делает продукты на Х. А так в телеге спроси в @haskellru, там пояснят, скорее всего.
Аноним 10/02/19 Вск 18:29:10 134523127
>>1344995
>Что вообще на нём кошерно писать?
Блокчейны было модно на хаскелле писать
Аноним 11/02/19 Пнд 06:01:42 134545028
>>1344871
shadowsocks клиет\сервер. Можно начать с socks5 прокси, потом разбить на клент сервер.
Аноним 11/02/19 Пнд 23:19:06 134607229
>>1343138
За риал ворлд хаскель спасибо. Меня уже тоншить начало от learn your haskell, потому что задач никаких не было, а с фантазией у меня хуево.
хотя я все равно нихуя, кроме трех задачек, не сделал
>>1344959
хуевый подход - у меня та же императивщина, только все состояния я передаю через рекурсию. Да и одна главная, огромная функция такая себе хуйня. Наверное, лучше разделить все на кучу независимых функций и пихать их в IO.
Мб выучу монады и буду пытаться заебашить все методом проб и ошибок. или ебанусь и пойду читать сикп
Банан 11/02/19 Пнд 23:33:09 134608730
1549917178759.png (23Кб, 671x191)
671x191
>>1343803
Зачем стэк, если есть никсос?
Аноним 11/02/19 Пнд 23:47:42 134609631
>>1346072
>За риал ворлд хаскель спасибо
Будь осторожен, он вроде пиздецки старый и об этом надо помнить постоянно. Но глава про парсинг здорово помогла мне с пониманием монад в своё время.

мимокрокодил
Аноним 12/02/19 Втр 00:11:32 134610632
>>1346087
Зачем никсос, если есть guix?
Банан 12/02/19 Втр 00:17:41 134610833
Банан 12/02/19 Втр 22:11:22 134652834
image.png (3Кб, 249x28)
249x28
Сука какой же я даун. Два дня ебался со сканировкой грэхэма и только сегодня заметил опечатку, из-за которой все летело к хуям.
Алсо, вот так можно делать?
Аноним 13/02/19 Срд 00:02:00 134656835
>>1346528
type Point =
∀ a. Floating a => (a, a)

p ∷ Point
p = (1.3, 5)
Банан 13/02/19 Срд 00:11:10 134657236
image.png (16Кб, 555x140)
555x140
>>1346568
что за перевернутая А? щя выебнусь, вроде в матеше она значит "для любого a."
Аноним 13/02/19 Срд 00:17:54 134657637
Аноним 13/02/19 Срд 02:07:40 134660938
>>1343135 (OP)
Я думаю, что у языка большой порог вхождения. Знать надо дохуя: лямбда-счисление, теория категорий и т.д.
Аноним 13/02/19 Срд 02:20:32 134661239
>>1346609
Не надо этого знать.
Аноним 13/02/19 Срд 05:27:47 134663140
Нихуя не понял зачем для IO отдельный синтаксис? Какие профиты перед обычным getLine :: () -> String как в окамле?
Банан 13/02/19 Срд 13:33:39 134679941
S90213-12322396.jpg (441Кб, 1080x1920)
1080x1920
>>1346576
Как много хуйни я еще не знаю...
Банан 13/02/19 Срд 13:51:51 134681442
Нахуя нужны partial functions? Что это вообще за костыль, почему бы просто не задавать каждой функции при ее определени область определения? Примерно в таком виде, как тут:
>>1346568
Тогда бы, например, у diva была бы область
forall a. Integral a, forall b. Integral b /= 0 -> a -> b -> a и тогда бы эти ошибки исправлялись на этапе компиляции.

Почему великие гении-создатели хацкеля не сделали так?
Аноним 13/02/19 Срд 14:15:21 134682943
>>1346631
Do-нотация - это синтаксический сахарок над bind для всех манаток.
Аноним 13/02/19 Срд 14:45:36 134685144
>>1346814
Потому что для этого нужны зависимые типы, а их ещё не завезли в хаскель в полном объёме. Кочай Idris, определяй область определения. Ну или пошерсти расширения хаскеля на предмет этого конкретно.
https://gist.github.com/edwinb/0047a2aff46a0f49c881
Банан 13/02/19 Срд 17:56:08 134696545
image.png (19Кб, 748x142)
748x142
>>1346851
прочитал про зависимые типы. Это что-то типа геттеров/сеттеров из ооп? А при чем тут область значений/определений?
> Кочай Idris, определяй область определения.
Мне бы для начала хацкель на уровне хеллоуворлдщика изучить
Аноним 13/02/19 Срд 18:11:29 134697746
>>1346965
>прочитал про зависимые типы. Это что-то типа геттеров/сеттеров из ооп?
В фонд золотых цитат /pr.
Аноним 13/02/19 Срд 18:23:31 134698547
>>1346965
>прочитал про зависимые типы. Это что-то типа геттеров/сеттеров из ооп?
Нет, это типа темплейтных классов/дженериков.
Аноним 13/02/19 Срд 18:30:41 134699748
>>1346965
Зависимые типы позволяют типам зависеть от значений или на соотношениях между значениями.
Например, выдержка с википедии:
In computer science and logic, a dependent type is a type whose definition depends on a value. A "pair of integers" is a type. A "pair of integers where the second is greater than the first" is a dependent type because of the dependence on the value.

Ну раз ты новичёк, забей пока, осваивай базовый хаскель и просто знай что такое есть.
Банан 13/02/19 Срд 19:00:52 134701149
>>1346985
Дженерики это обычные forall, а эти зависимые типы их не очень напоминают.
>>1346997
> In computer science and logic, a dependent type is a type whose definition depends on a value. A "pair of integers" is a type. A "pair of integers where the second is greater than the first" is a dependent type because of the dependence on the value.
Так более понятно. Этот пример более показательный, чем с вектором. все таки иногда надо открывать англ вики, она может быть более понятной, чем русская


> Потому что для этого нужны зависимые типы, а их ещё не завезли в хаскель в полном объёме.
>еще
А в хаскель их планируют добавлять?
Ну а вообще, я не понимаю в чем смысл этих maybe, монад я их еще не учил, если что, если даже у функции head есть ексепшны? Хотелось бы полностью ексепшн-лесс язык.
Аноним 13/02/19 Срд 19:00:57 134701250
15463371164730.jpg (119Кб, 960x680)
960x680
Пиздец во что скатилась эта параша. Года 3 назад были треды по зависимым типам, с серьёзным обсуждением не только всех этих идрисов итд, но и теории типов. А сейчас что? Полтора школопитека, один из которых спрашивает "что за буква А перевёрнутая?", другой про зависимые типы такую хуету понес, что даже цитировать стыдно.
Банан 13/02/19 Срд 19:08:25 134702051
>>1347012
> Года 3 назад
А недели две назад хаскель треда даже не существовало.
>Полтора школопитека, один из которых спрашивает "что за буква А перевёрнутая?", другой про зависимые типы такую хуету понес, что даже цитировать стыдно.
Вообще-то я один школопитек.
Аноним 13/02/19 Срд 19:10:10 134702452
>>1347011
>А в хаскель их планируют добавлять?
Ну движуха куда-то в ту сторону есть, но конкретных планов нет.
Аноним 13/02/19 Срд 19:18:35 134703653
>>1347012
Двачую. В 2013 хачкелем тролили в каждом треде.

второй школопитек 31-лвл
Аноним 13/02/19 Срд 20:15:08 134707554
>>1346609
Ерунда. Это дело привычки. За обычным императивным программированием тоже стоит своя теоретическая база и куча страшных слов
Аноним 13/02/19 Срд 20:19:33 134707855
>>1346631
У американцев есть поговорка: "Все что было в Вегасе, остается в Вегасе", так вот с монадой IO точно такая же история. Операции ввода-вывода это операции с побочными эффектами, и когда мы их заворачиваем в IO, мы изолируем эти операции от чистых функций.
Аноним 13/02/19 Срд 22:46:06 134715856
Сап двач! В чем лучше писать на сабже? Думак про емакс и вим, но для вима хаскель режим сдох, а из емакса хер сделаешь конфетку (свечку не держал, пруфов не будет).
Банан 13/02/19 Срд 22:48:28 134715957
Аноним 13/02/19 Срд 23:26:09 134717558
Аноним 13/02/19 Срд 23:29:19 134717959
>>1347158
Глянь, что покажу
https://wiki.haskell.org/IDEs

А вообще, думаю любой редактор с подсветкой синтаксиса подойдет, особенно для начинающих, хоть notepad++, хоть gedit
Аноним 13/02/19 Срд 23:32:08 134718060
>>1347179
подсветка тоже не очень то и нужна
Аноним 13/02/19 Срд 23:41:39 134718561
>>1347180
Мне с ней удобней, у людей есть цветное зрение, почему бы не использовать такую замечательную способность
Аноним 14/02/19 Чтв 00:45:30 134720962
Аноним 14/02/19 Чтв 00:57:54 134721363
...
Аноним 14/02/19 Чтв 01:12:39 134721764
>>1346814
Liquid Haskell тебе нужен
Аноним 14/02/19 Чтв 01:17:59 134721865
>>1347012
Харкачую, пока "что за А перевёрнутая" - на пыхе бабло рубят, я хуй без соли доедаю, видно такова уж судьба. Так что, дропайте FP, найдите себе тянку, форд фокус в кредит, дачку. А FP для ебанутых, не ломайте себе жизнь.
Аноним 14/02/19 Чтв 01:59:59 134722466
Аноним 14/02/19 Чтв 11:46:44 134739867
>>1346985
>темплейтных классов/дженериков
Это параметрически полиморфные типы.

>>1346965
Зависимые типы это что-то типа
toNatural :: (Num a, a >= 0) => b -> a
или
(/) :: (a ~ b, Num a, Num b, b /= 0) => a -> b -> a
Аноним 14/02/19 Чтв 16:25:15 134753068
>>1347012
Все время кажется, что дальше падать уже некуда, и все равно со временем средний технический уровень постеров падает. Вот такой вот парадокс.
Аноним 14/02/19 Чтв 21:01:18 134766169
>>1346106
Как там сделать build environment, чтобы был ghc с пакетами и можно было кабалом собирать? В гугле ничего толком не нашёл, в мануале тоже. Ну или, если guix можно юзать как билд-систему, какая там поддержка ghc?
Аноним 14/02/19 Чтв 21:05:26 134766570
>>1344995
Вебчик, например. Yesod, Servant, Hakyll. Можно даже фронт через Reflex, но это очень на любителя.

http://www.haskellforall.com/2019/02/haskell-command-line-utility-using-ghc.html
Вот ещё например прикольный шоу-кейс, пишешь типы - компилятор генерирует тебе код. Генерация кода в хаскелле в последнее время мега-популярна ваще.
Аноним 14/02/19 Чтв 21:09:21 134766871
>>1346609
>у языка большой порог вхождения
Да, это так.
>Знать надо дохуя: лямбда-счисление, теория категорий
Нет, вообще нет, откуда вы это берёте блиа!
Аноним 14/02/19 Чтв 21:12:33 134766972
>>1346631
Если видишь сигнатуру () -> String в хаскелле, можно смело предполагать, что она ничего не делает. Не запускает ядерные ракеты, не пересобирает ядро, не шлёт запросы в базу данных, и т. п. Язык позволяет явно выделить "грязный" код с вводом-выводом и другими эффектами. Вся бизнес-логика должна оставаться в чистой части, вообще без эффектов. Тогда её легко тестировать и трудно сломать.
Аноним 14/02/19 Чтв 21:17:52 134767873
>>1347011
>в чем смысл этих maybe ..., если даже у функции head есть ексепшны?
Это недостаток, исторически сохранившийся в части стандартной библиотеки. Можно взять другую, где такого нет, и жить спокойно.
>Хотелось бы полностью ексепшн-лесс язык
Увы, не получится. Совсем никак. В чистом коде ещё можно, но как только начинается ввод-вывод - эксепшены на эксепшенах. Причём в хаскелле они могут реально стать проблемой.

https://www.fpcomplete.com/blog/2016/11/exceptions-best-practices-haskell
Аноним 14/02/19 Чтв 21:20:24 134768174
>>1347158
Емакс однозначно. haskell-mode + company-ghci
Можешь также попробовать ghcid плагин к vscode.
Всё остальное даже не пытайся, это просто унылый анальный дрочь, зря потратишь время и выбросишь в мусорку что получилось.
Банан 14/02/19 Чтв 21:50:28 134770675
15491308921970.png (22Кб, 752x180)
752x180
>>1347661
Хуй его знает, я стэком еще не пользовался, ставил либу только так:
Аноним 14/02/19 Чтв 22:27:55 134773476
>>1343135 (OP)
Могу порекомендовать блог
https://www.parsonsmatt.org/
Сразу ничего не поймёшь, конечно, но будет ориентир, к чему стремиться и как делать. Я начинал с learnyouahaskell, после прочтения долго не мог выйти на следующий уровень, чтение блогов и реддита очень сильно помогло.
Аноним 14/02/19 Чтв 22:33:10 134773877
>>1347706
Это nix, им я и так пользуюсь. Мне про guix интересно.
Аноним 14/02/19 Чтв 22:43:38 134774678
Как же хорошо быть студентиком, рантьебогом или просто хиккой-домоседом и пописывать велосипеды на хачкиле. Но когда ты вынужден писать на мэйнстрим параше, только потому что за неё платят реальные деньги, здесь все твои мечты разбиты и ничего, кроме бессильной досады не остаётся.
Аноним 15/02/19 Птн 05:31:04 134784579
>>1347669
Да, на словах звучит красиво и понятно, но я не вижу как это лучше на практике. Можешь привести пример? Я просто читаю learnyouhaskell и там работа с IO начинается еще до всех этих монад (что как я понял просто тайп-класс).
Аноним 15/02/19 Птн 09:15:34 134790380
>>1347845
Какой пример-то тут нужен? Есть два вида функций: те, которые всегда на одних и тех же входах выдают одно и то же значение, и те, которые могут выдавать разное в зависимости от фазы луны, и при этом стрелять тебе в ногу. Первые удобно тестировать и отлаживать, в них меньше пространства для ошибок, вторые неудобно, и хорошо, когда их можно явно разделить.

Монады - это просто удобный синтаксис для вычислений с эффектами. do-нотация - это просто засахаренная версия того же синтаксиса.

А вообще, вот есть полезный хинт для понимания того, как в хаскеле работают с эффектами: на самом деле, "IO a" - это такой материализованный "список дел", который можно передавать в функции и возвращать. Конечный результат этих манипуляций заключается в составлении одного большого "списка дел", который называется main. Он передаётся в рантайм и там исполняется. С такой точки зрения, вообще все функции в хаскелле чистые.
Банан 15/02/19 Птн 10:20:25 134792581
S90215-09151919.jpg (91Кб, 1080x530)
1080x530
S90215-09153492.jpg (172Кб, 1080x806)
1080x806
>>1347678
Или я не понял, что такое синонимы типов, или в этих ваших хаскелях какие-то костыли неработающие. неужели ghc так сложно преобразовать Point в Floating a => (a,a)?
Банан 15/02/19 Птн 10:20:59 134792682
>>1347678
Это не был ответ тебе, опечатался.
Аноним 15/02/19 Птн 10:31:51 134792783
>>1347925
Ты пытаешься взять конкатенацию списка и его головы. Естественно, оно не будет чекаться, вне зависимости извращений, которые ты пытаешься наворотить.
Банан 15/02/19 Птн 10:55:12 134793984
S90215-09533642.jpg (44Кб, 1080x356)
1080x356
S90215-09535108.jpg (178Кб, 1080x783)
1080x783
Аноним 15/02/19 Птн 11:13:00 134796085
Аноним 15/02/19 Птн 11:13:29 134796286
>>1347903
>Монады - это просто удобный синтаксис для вычислений с эффектами
Какие у Maybe эффекты?
Аноним 15/02/19 Птн 11:20:13 134797187
>>1347962
После первого Nothing вычисления прекращаются.
Аноним 15/02/19 Птн 11:26:53 134797788
>>1347962
Потенциальное отсутствие значения. Я вижу, что ты пытаешься сказать - слишком общее определение для слова "эффект". Да, но в теоретических работах, да и на практике, всегда получается, что реальные эффекты типа ввода-вывода соседствуют со всякими прочими вычислительными контекстами в рамках одной парадигмы, потому что это похожие механизмы.
Аноним 15/02/19 Птн 11:52:49 134798589
Банан 15/02/19 Птн 12:02:43 134799190
>>1347985
Поэтому я вставил ImpredicativeTypes
Аноним 15/02/19 Птн 12:07:44 134799891
>>1347991
Там же написано, что оно doesn't work.
Банан 15/02/19 Птн 12:23:18 134800392
S90215-11180509.jpg (238Кб, 1080x1056)
1080x1056
>>1347998
Только я не понял, почему
Point a = (a,a) предиктативный, а
Point a = Floating a => (a,a) - нет? Ведь и там и там в определении есть a.
Аноним 15/02/19 Птн 13:49:01 134806893
Аноним 15/02/19 Птн 14:01:21 134808094
>>1347012
> Года 3 назад были треды по зависимым типам, с серьёзным обсуждением не только всех этих идрисов итд, но и теории типов
Ну не пизди. Какое может быть ОБСУЖДЕНИЕ подобной хуйни? ФП - это как наркотик, ты начинаешь с лиспа, думая о том, как это поможет стать крутым программистом, а заканчиваешь пруверами и требуешь еще. Аутисты тех лет повырастали (см. судьбу Никиты Садкова, например). Новым аутистам эта тема уже не так интересна, потому что хайп ФП прошел.
Лямбды в C# - 2007, лямбды в С++ - 2011, лямбды в java - 2014 и так далее. Если ты был школьником в 2010, вокруг было - ФП, ФП, ФП. Кто-то из этих школьников в 2013 сторчался до идрисов и агд. А потом - все, хайп ФП прошел.
Аноним 15/02/19 Птн 14:17:29 134809795
>>1348080
А что сейчас хайпово?
Аноним 15/02/19 Птн 14:46:01 134812496
>>1348097
> А что сейчас хайпово?
ReasonML. Вааще не ФП. /s
Аноним 15/02/19 Птн 14:46:53 134812697
>>1348097
Работа на западного боярина. Все треды об этом.
15/02/19 Птн 17:49:31 134830598
Аноним 15/02/19 Птн 18:42:56 134833699
>>1348080
>Лямбды в C# - 2007, лямбды в С++ - 2011, лямбды в java - 2014
>ФП
/0
Аноним 15/02/19 Птн 21:11:39 1348437100
>>1348080
>Лямбды в C# - 2007, лямбды в С++ - 2011, лямбды в java - 2014
>ФП, ФП, ФП
Вот. Ты ещё один дебил.
Аноним 15/02/19 Птн 22:14:56 1348495101
Расскажите нубу, как в общих чертах выглядит условный web-api.
Задача: к нам приходит GET /hello/{user_id}
мы должны сходить с условную БД за именем пользователя по его ID, прочитать условную локализацию приветствия из конфига и провернув это через бизнес-логику, в нашем случае вставление имени пользователя в шаблон, вернуть пользователю.

Как выглядит такая архитектура в хаскелле?
У нас получается чистая функция в бизнес логике, но и входы и выходы у неё IO, правильно?
Как решается вопрос многопоточности?

Взываю к боярам за наставлениями мудрыми.
Аноним 16/02/19 Суб 04:49:16 1348589102
>>1348495
Технические вопросы типа многопоточности решаются библиотеками.

>У нас получается чистая функция в бизнес логике, но и входы и выходы у неё IO, правильно?
Да, типа того.

>Как выглядит такая архитектура в хаскелле?
Вариантов много, есть разные идиомы. Советую почитать блоги parsonsmatt.org и fpcomplete.com
Аноним 17/02/19 Вск 11:31:44 1349316103
>>1347678
>Увы, не получится. Совсем никак. В чистом коде ещё можно, но как только начинается ввод-вывод - эксепшены на эксепшенах. Причём в хаскелле они могут реально стать проблемой.
Но можно кидать везде maybe или что-то типа data a = Just a | exception1 | exception2 ...
Тогда в рантайме ексепшнов не будет.
Аноним 17/02/19 Вск 13:52:58 1349502104
>>1349316
В чистом коде - да. А в IO? Что делать, когда нет доступа к файловой системе или закончилась память?
Аноним 19/02/19 Втр 21:25:36 1351045105
>>1344026
Так и не вдуплил как прогонять список через рекурсию, есть задача
>Вернуть первый элемент списка натуральных чисел, кратный 5. При отсутствии такого элемента вернуть 0;
Я делаю так
check [] = [] -- выставил базу
check [x:xs] | (mod x 5)==0 = check xs
| otherwise = 0
Читал уже про определение функций, рекусрусий, смарел примеры, пробовал определять типы для функции в repl, они там не пашут даж, брал с примеров.
Вот я mod x 5 чекаю на кратность дальше в теле функции мне следовательно выводить его надо, дайте подсказку
Аноним 19/02/19 Втр 21:31:12 1351049106
>>1347011
>в чем смысл этих maybe, монад я их еще не учил, если что, если даже у функции head есть ексепшны?
Неправильная постановка вопроса, правильно: в чем смысл этих head, если есть монады? И ответ: никакого смысла, просто так исторически сложилось (стандартная библиотека - говно)
Аноним 19/02/19 Втр 21:31:52 1351050107
Аноним 19/02/19 Втр 21:36:44 1351052108
>>1351045
>Вернуть первый элемент списка
>check [] = []
>элемент списка
>[]
/0
Аноним 19/02/19 Втр 21:57:23 1351059109
>>1351052
у меня каша в голове, хуль какую еще базу задавать, 0 штоле?
Аноним 19/02/19 Втр 22:42:51 1351073110
>>1351050
с этим только говно можно сделать
Аноним 19/02/19 Втр 23:43:03 1351108111
>>1351045
if res == [] then 0 else head res
where res = take 1 $ filter (\x -> mod x 5 == 0) array
>>1351059
а, я понял, это толстота
Аноним 20/02/19 Срд 00:17:06 1351127112
>>1351108
>а, я понял, это толстота
...
Аноним 20/02/19 Срд 00:17:29 1351129113
>>1351073
У тебя каша в голове.
Аноним 20/02/19 Срд 00:33:51 1351139114
Аноним 20/02/19 Срд 19:43:41 1351501115
изображение.png (3Кб, 612x88)
612x88
>>1351108
>>1351139
Я хочу на чистой рекурсии, чтобы понять рекурсию. С функциями высших порядков каждый сможет. Вот для начала как мне управлять индексом через паттернг матчинг, допустим каждый элемент умножить на джва.
Аноним 20/02/19 Срд 19:45:36 1351502116
>>1351501
Понимаю что задачки пиздец простые, видимо я чет упустил при поверхностном изучении хускеля
Аноним 20/02/19 Срд 19:56:05 1351511117
>>1351501
Ты определяешь функцию go два раза. Пиши в одной строке через точку с запятой, или в файле как нормальные люди.
Аноним 20/02/19 Срд 20:24:29 1351529118
изображение.png (9Кб, 308x110)
308x110
>>1351501
> допустим каждый элемент умножить на джва.
Тогда тебе надо x на два умножать, а не xs, x это первый элемент списка, а xs хвост списка, то есть тоже список, нельзя сложить элемент и список, вместо плюса тебе надо использовать оператор присоединения к списку - двоеточие.
К тому же, в данном случае интерпретатор решает, что ты переопределил функцию go, так что надо либо как здесь советуют поступить
>>1351511
>Пиши в одной строке через точку с запятой, или в файле как нормальные люди.
либо использовать в интерпретаторе такую конструкцию для многострочного ввода :{\n<строчки кода>\n:}

Да и назвать надо стараться функции осмысленно.

Аноним 20/02/19 Срд 20:26:06 1351532119
Аноним 20/02/19 Срд 20:32:01 1351534120
>>1351501
>допустим каждый элемент умножить на джва.
Такое надо делать так:

doubleItems = map (*2)

>Я хочу на чистой рекурсии, чтобы понять рекурсию. С функциями высших порядков каждый сможет.
Так начни с того, что реализуй основные такие функции, всяческие map, foldl, filter, и прочие. Отличное упражнение, как раз на рекурсию, они же через нее реализуются.
Банан 20/02/19 Срд 20:52:48 1351551121
S90220-19433208.jpg (39Кб, 1080x353)
1080x353
>>1351502
Ты упустил определение фунукции. Каждая функция что-то принимает т что-то возвращает. Напртмер, (+) принимает все, что есть членом класса Num, а (++) примает два массива и выдает новый. Ты не можешь применить ++ к немассиву, а (+) к тому, что не есть членом Num. как ты это делал тут
>>1351501
и тут
>>1351045

Мне кажется, ты вообще нихуя не читал - прочитай хотя бы learnyourhaskell до модулей включительно.

>>1351501
fold это та же рекурсия (x:xs), прочитай в том же learnyourhaskell, как она работает.
Банан 20/02/19 Срд 20:55:51 1351552122
Так как в хацкеле перейти к энному элемента списка можно только за линейное время, то foldl работает медленнее?
Аноним 20/02/19 Срд 20:57:23 1351553123
Аноним 20/02/19 Срд 21:10:02 1351558124
>>1351552
Перейти к энному элементу списка не в хаскеле, а вообще везде просто по определению списка можно только за энное время.
Аноним 20/02/19 Срд 22:24:16 1351600125
>>1351501
Чтобы понять рекурсию надо понять рекурсию.
На чистой рекурсии достаточно сделать только foldr, всё остальное можно выразить через него.


foldr _ b [] = b
foldr f b (x:xs)= f x (foldr f b xs)

map f = foldr ((:) . f) []
Аноним 20/02/19 Срд 23:57:27 1351659126
>>1351529
По подсказкам хаскеля збазиба
> Да и назвать надо стараться функции осмысленно.
А вот это обидно было

Фп в универе задали, а хаскель и пролог меня не интересуют, тем более в рашке, хотя языки интересные
Аноним 21/02/19 Чтв 01:21:26 1351711127
>>1351600
>всё остальное можно выразить через него
Сильное утверждение. Проверять мы его, конечно, не будем.
Аноним 21/02/19 Чтв 01:21:53 1351712128
>>1351659
То есть ты хочешь сказать, что учишься на программиста?
Аноним 21/02/19 Чтв 10:31:52 1351792129
>>1351711
Достаточно немного почитать. Слова для гугления: initial algebra semantics
Аноним 21/02/19 Чтв 14:36:03 1351917130
>>1351711
y f = foldr (\_ p -> f p) undefined $ repeat undefined
Аноним 21/02/19 Чтв 21:35:50 1352207131
изображение.png (5Кб, 388x189)
388x189
Проверьте на быдло код, вроде разобралс, осталос выспаться
> Вернуть первый элемент списка натуральных чисел, кратный 5. При отсутствии такого элемента вернуть 0
Результ: 5
И если пилить эту же задачу с if then else то различие ток в сахаре?
Аноним 21/02/19 Чтв 21:52:03 1352225132
Screenshot20190[...].png (14Кб, 399x119)
399x119
>>1352207
Я бы так сделал. В условии сказано, что список натуральных чисел, так что проверка на "больше нуля" избыточна.
>И если пилить эту же задачу с if then else то различие ток в сахаре?
Естественно, а какое тут может быть различие?
Аноним 21/02/19 Чтв 22:01:07 1352230133
>>1352225
до сворачивания списков и монад я ищо не дошёл
Аноним 21/02/19 Чтв 22:02:40 1352231134
>>1352230
Ну так делов-то. Возьми да напиши их сам. Или код подсмотри.
Аноним 21/02/19 Чтв 22:06:21 1352234135
>>1352231
Ну дык, я так и делал, прост запостил чтобы убедиться что я правильно делаю
Аноним 21/02/19 Чтв 22:15:28 1352245136
>>1352207
>Вернуть первый элемент списка
> -> [Int]
Аноним 21/02/19 Чтв 22:17:54 1352250137
Аноним 21/02/19 Чтв 22:30:06 1352260138
изображение.png (237Кб, 478x201)
478x201
Аноним 21/02/19 Чтв 22:45:13 1352271139
Аноним 21/02/19 Чтв 23:09:59 1352285140
15189901329750.png (204Кб, 505x431)
505x431
Аноним 21/02/19 Чтв 23:22:03 1352294141
>>1352207
Тебя элемент просят вернуть, а не список. [Int]->Int, лучше даже Integral a => [a] -> a. Если хочешь первый элемент, то вместо take 1 можно взять функцию head, она возвращает первый элемент списка, его "голову"
Аноним 22/02/19 Птн 00:26:33 1352330142
изображение.png (31Кб, 481x245)
481x245
>>1352225
Тут можно еще find использовать из Data.List
Аноним 22/02/19 Птн 16:52:44 1352617143
>>1352294
О, збазиба за замечание, исправлю
Аноним 22/02/19 Птн 16:57:34 1352619144
ну и зачем это все?
Аноним 22/02/19 Птн 16:58:51 1352621145
>>1352619
ты втираешь какую-то тленность земного бытия
Аноним 22/02/19 Птн 18:34:11 1352692146
Аноним 23/02/19 Суб 11:58:15 1352963147
>>1343135 (OP)
Советую всем вкатывальщикам в функциональное программирование вот эти две книги:
https://github.com/hmemcpy/milewski-ctfp-pdf
https://www.goodreads.com/book/show/25587599-haskell-programming-from-first-principles
https://www.reddit.com/r/haskell/comments/5glaon/why_doesnt_haskell_programming_from_first/

Рекомендую сначала прочитать книгу по теории категорий и уже потом браться за haskell
Аноним 23/02/19 Суб 17:52:44 1353331148
>>1352963
Это дело хорошее, но я добавлю, что можно ещё сразу просто взять и начать писать. Ну, чтобы ни у кого не возникало иллюзий о недоступности языка для простых смертных.

А ещё есть http://okmij.org/ftp/
Аноним 24/02/19 Вск 13:51:09 1353869149
Аноним 24/02/19 Вск 14:24:31 1353917150
>>1353869
напомни как бамплимит будет
через год примерно
Аноним 25/02/19 Пнд 23:07:25 1355231151
> удалить из списка элементы, индексы которых кратны 3
Пытаюсь запилить, опять намудил с типами компилятор Арёт уже что я мудило
Ошибки в 4 и 9 строках, прошу подсказку

module Main where

main :: IO ()
main = print $ check [1..10] 0

check :: [a] -> (a -> Int) -> [a]
check [] _ = []
check (x:xs) i
| (mod i 3) > 0 = x
| otherwise = check xs (i+1)

Банан 25/02/19 Пнд 23:25:43 1355255152
>>1355231
Функция должна возвращать массив, а в 9й строчке она у тебя возвращает a, а не [a].
Алсо, на этой же строчке ты пытаешься получить остаток от деления функции на тройку - ты ебобо?

Учись читать маты компилятора, а не задавать вопросы в тред.
Аноним 26/02/19 Втр 00:52:04 1355351153
>>1355255
даже если мне добавить x: xs, это не исправит, я ваще запутолс, какую главу мне перечитывать? Скок примеров всяких рекурсий и сурсы функций стандартной либы смотрел, я не вижу этот простой паттерн, управлять счетчиком. Рекурсию вроде понял вот я и делаю в guard выражении остаток больше нуля и сопостовляю в образец нового списка.
Аноним 26/02/19 Втр 05:22:28 1355404154
>>1355255
>Учись читать маты компилятора, а не задавать вопросы в тред
Более уебищный высер чем у GHC только у плюсов когда ошибка в шаблонах. Это реально нечитаемая хуета.
Аноним 26/02/19 Втр 07:16:43 1355419155
>>1355351
Похоже, что ты вообще программировать недавно начал. Тут никакая глава не поможет.
>этот простой паттерн, управлять счетчиком
Обычно такое можно обнаружить в текстах про хвостовую рекурсию, где берётся какая-нибудь нехвостовая функция и переделывается в хвостовую путём прицепления аккумуляторного аргумента. Получается вещь, очень похожая на for-цикл. Но вообще, конечно, явную рекурсию писать не надо, по возможности.

Твой пример решается так:
check :: [Int] -> Int -> [Int]
check [] _ = []
check (x:xs) i
| i `mod` 3 == 0 = x : (check xs $ i + 1)
| otherwise = check xs $ i + 1
Аноним 26/02/19 Втр 07:21:22 1355422156
>>1355404
Я могу понять, если у тебя сплошной темплейт хаскелль и десяток расширений на файл. Но если ты не можешь прочитать элементарную херню вроде той, которая выдаётся в примере с делящимися индексами, то проблемы на твоей стороне.
Аноним 26/02/19 Втр 07:32:48 1355425157
>>1355419
Сразу ещё напишу более лучший вариант без явной рекурсии:
check' :: Integral a => [a] -> [a]
check' xs = map snd filtered
__where
____filtered = filter ((== 0) . (`mod` 3) . fst) indexed
____indexed = zip indices xs
____indices = [0 .. length xs - 1]
Аноним 26/02/19 Втр 07:50:41 1355427158
>>1355404
Если нигде не указывать типы, то высер вполне может быть нечитаемым. Но, если прописать ручками желаемый тип в том месте, где ошибка вылезла, то высер становится очень даже приятным.
Аноним 26/02/19 Втр 07:54:01 1355430159
>>1355425
Длину, кстати, указывать не надо. Длина списка после zip равна длине наименьшего.
Аноним 26/02/19 Втр 08:41:29 1355443160
Аноним 26/02/19 Втр 20:40:40 1355897161
>>1355419
Да да, можешь не выебываться шо ты можешь мне пояснить за никому не нужные аппликативные функторы и монады, ведь у тебя здесь смысловая ошибка, хА!
> | i `mod` 3 == 0 = x : (check xs $ i + 1)
Аноним 26/02/19 Втр 20:45:49 1355901162
>>1355897
Представься, мразь.
Аноним 26/02/19 Втр 21:28:55 1355924163
absolutely-dege[...].jpg (77Кб, 510x653)
510x653
Аноним 26/02/19 Втр 22:23:46 1355956164
>>1355419
check :: [t] -> [t]
check a = case a of [] -> []
[_] -> []
[_, x] -> [x]
(_ : (x1 : (x2 : xs))) -> x1 : x2 : check xs
Аноним 26/02/19 Втр 22:25:41 1355958165
>>1355956
check :: [a] -> [a]
check a = case a of [] -> []
                    [_] -> []
                    [_, x] -> [x]
                    (_ : (x1 : (x2 : xs))) -> x1 : x2 : check xs
Аноним 26/02/19 Втр 22:28:07 1355959166
>>1355958
Ты конченый. Не пиши сюда больше.
Аноним 26/02/19 Втр 23:00:54 1355982167
>>1355959
Удаляем каждый третий элемент, нумерация начинается с нуля. Декларативный подход при реализации. Что не так-то?
Аноним 26/02/19 Втр 23:09:26 1355990168
>>1355982
import Data.List.Split
check = concat . map init . chunksOf 3
Аноним 26/02/19 Втр 23:34:13 1356004169
>>1355990
Хотя, лучше так:
check i | i < 2 = error "Ohuel chtole suka?"
check i = concatMap (take $ i - 1) . chunksOf i
Аноним 26/02/19 Втр 23:37:07 1356006170
>>1355901
Затраллен, иди исправляй свою ошибку, (mod i 3) > 0
А так спасибо, пониал паттерн, запилил себе поиск по списку строк, ща пролог буду доделывать, там еще угарнее
27/02/19 Срд 19:40:33 1356363171
>>1355897
Чет ты какой-то не очень умный.

мимо
Аноним 01/03/19 Птн 22:00:04 1357430172
15243909155790.jpg (38Кб, 640x480)
640x480
Сап. Читаю книжку из шапки, но не хватает практики. Где можно найти задачки для лучшего запоминания?
Аноним 02/03/19 Суб 16:54:07 1357783173
>>1357430
Вот в этой >>1344844 книжке в конце каждой главы есть упражнения.

Еще вот такие штуки есть:

https://exercism.io/tracks/haskell/exercises

https://wiki.haskell.org/H-99:_Ninety-Nine_Haskell_Problems

https://github.com/opqdonut/haskell-exercises

https://wiki.haskell.org/Tutorials#Practical_Haskell

А вообще, можешь просто взять задачки для изучения любого другого языка, и решать их на хаскелле, а можешь свои какие-нибудь задачки придумать, типа вот, понадобилась тебе какая-нибудь программка, а напишу ка я ее на хаскелле. И насчет примеров из книжек, ты их не просто читай, а вводи, исполняй, исследуй их, играйся с ними.
Аноним 02/03/19 Суб 17:01:49 1357790174
>>1357783
экзерцизм не советую, унылая неудобная хуйня
мимо
Аноним 02/03/19 Суб 17:20:02 1357803175
>>1357790
Только для хускела или вообще? Что в этом сайте тебя бесит больше всего?
Аноним 02/03/19 Суб 17:29:19 1357810176
вы пизду-то нюхали хоть раз
Аноним 02/03/19 Суб 17:30:54 1357812177
>>1357810
>пизду-то нюхали
Вообще-то пизду надо ебать а не нюхать, девственник.
Аноним 02/03/19 Суб 23:09:42 1358000178
>>1357803
Вообще. cli тул неудобный, фидбэк зачастую дают индусы-долбоебы.
Аноним 03/03/19 Вск 00:41:14 1358037179
IMG201903011351[...].jpg (42Кб, 637x349)
637x349
Аноним 06/03/19 Срд 17:22:05 1360205180
Читаю книгу со слоником на обложке. Но люто печет с того что не работают некоторые примеры, например на странице 48 есть такой код https://pastebin.com/iFmkLgim, но я получаю тонну ошибок. И это не единичный случай, щито делать?
Аноним 06/03/19 Срд 20:08:11 1360318181
>>1360205
Там надо в стрелке, в списочном выражении, минус поставить, а то там другой знак, похоже, тире.
>removeNonUppercase st = [ c | c <– st, c `elem` ['A'..'Z']]
Надо не так <–, а вот так <-
removeNonUppercase st = [ c | c <- st, c `elem` ['A'..'Z']]
Я с таким сталкивался, в примерах в книжках, для красоты видимо, не все символы точно такие, какие ожидает ghc, а просто похожие на вид, так что, когда копируешь примеры можешь столкнуться с такими вот ошибками, это часто касалось апострофов, тире и кавычек.
Аноним 11/03/19 Пнд 20:56:12 1362604182
Selection176.png (32Кб, 492x435)
492x435
Selection177.png (24Кб, 1022x188)
1022x188
Selection178.png (45Кб, 979x317)
979x317
Selection179.png (58Кб, 940x477)
940x477
За хуйня? Как фиксить?
Запускаю
cabal configure --enable-tests && cabal build && cabal test

Аноним 12/03/19 Втр 20:42:52 1363142183
>>1362604
Импорть Main из теста
Аноним 14/03/19 Чтв 20:52:52 1364382184
>>1343135 (OP)
А есть ли в функциональном программировании свои паттерены, есть ли работы вроде книги Банды Четырех про паттерены ООП?
Аноним 14/03/19 Чтв 21:31:25 1364427185
Аноним 14/03/19 Чтв 21:43:19 1364437186
>>1364382
> А есть ли в функциональном программировании свои паттерены
Да
>есть ли работы вроде книги Банды Четырех про паттерены ООП?
https://github.com/hmemcpy/milewski-ctfp-pdf
Аноним 14/03/19 Чтв 21:56:25 1364444187
>>1364382
Паттерны нужны, чтобы долбоёбы могли писать хороший код. Среди функциональщиков долбоёбов нет. Ответ очевиден.
Аноним 14/03/19 Чтв 22:21:08 1364468188
>>1364444
Ну, всегда же есть какие-то удачные приемы, лучшие практики и все такое. Надо же использовать опыт предыдущих поколений, чтобы двигаться вперед.
Аноним 14/03/19 Чтв 23:12:07 1364500189
>>1364437
А про архитектуру крупных приложений в функциональном стиле там есть? Или, когда планируют архитектуру в принципе не важно на каком языке и в какой парадигме собираются писать?
Аноним 14/03/19 Чтв 23:41:06 1364514190
>>1364500
Ну есть ещё голубая книжка, только там Scala.
Аноним 15/03/19 Птн 09:01:06 1364600191
>>1364468
Только паттерны тут не при чем.
Аноним 15/03/19 Птн 19:54:43 1364900192
>>1364600
Паттерены тут при всем, потому что само слово паттерен означает образец. Так-то в хаскеле все эти монады и функторы являются паттеренами, это же обычные классы типов, просто в джаве абстрактные фабрики фасадов синглтонов, а в хаскеле монады, комонады, функторы, аппликативные функторы, мноиды и прочие
Аноним 15/03/19 Птн 20:02:51 1364905193
>>1364514
>голубая книжка, только там Scala.
Я знаю про smalltalk есть голубая книжка, а еще у Михаила Зощенко есть "Голубая книга", сборник сатирических новелл, в общем, если поискать, много есть всяких голубых книжек, а какую ты имеешь в виду? Беглый гуглеж ничего не дал.
Аноним 15/03/19 Птн 20:03:55 1364908194
Аноним 15/03/19 Птн 20:13:43 1364913195
Аноним 16/03/19 Суб 10:55:31 1365255196
Аноним 17/03/19 Вск 02:34:57 1365817197
>>1343135 (OP)
Угадай фильм по коду:
‍♂️.‍♀️.‍♂️
Аноним 17/03/19 Вск 03:14:33 1365829198
>>1365817
Операция Ы и другие приключения Шурика
Аноним 17/03/19 Вск 13:36:01 1365999199
>>1365829
не правильно.
ответ: Человеческая многоножка
Аноним 17/03/19 Вск 14:04:33 1366011200
Splendor1999Spa[...].jpg (22Кб, 266x375)
266x375
Аноним 18/03/19 Пнд 22:16:14 1366767201
>>1364900
>Монады и функторы являются паттеренами, это же обычные классы типов
Ой вэй. Тайпклассы - это просто немного более, чем интерфейсы.
Аноним 18/03/19 Пнд 23:12:09 1366799202
>>1366767
Ну да, а алгебраические типы - это немного более, чем рекорды с енумами. И вообще, этот ваш хаскель - всего лишь немного более, чем джаваскрипт какой-нибудь.
Аноним 19/03/19 Втр 08:24:30 1366921203
>>1366799
Почти так и есть. Тайпклассы всего-лишь нужны для обеспечения adhoc полиморфизма. А ты думал, что хаскель - это сорт оф рокет сайенс?
Аноним 19/03/19 Втр 17:09:22 1367102204
>>1366767
>Монады и функторы являются паттеренами,
>Тайпклассы - это просто немного более, чем интерфейсы

Анон, ты правда такой тупой или просто невыспавшийся тогда был?
Аноним 19/03/19 Втр 17:25:10 1367112205
>>1367102
А че не так? Монада - это не тайпкласс уже?
Аноним 19/03/19 Втр 17:37:01 1367117206
>>1366921
>это сорт оф рокет сайенс
Да нет, ты что. Так, хуйня подзаборная. Лежит гниёт себе вместе с остальными, даже пнуть противно.
Аноним 19/03/19 Втр 17:37:45 1367118207
>>1367112
Монада - это моноид в моноидальной категории эндофункторов.
Аноним 19/03/19 Втр 17:39:10 1367120208
>>1366921
В общем-то, и весь хаскель "всего-лишь" нужен для исполнения машинных кодов на процессоре. Ничего необычного.
Аноним 19/03/19 Втр 17:54:57 1367126209
>>1367118
Это все и без тебя знают. Но в хаскеле это интерфейс, помогающий абстрагировать вычисления с побочными эффектами.

>>1367120
Ну да, довольно мощный высокоуровневый ЯП. Только некоторые школьники думают, что на нём академики пишут.
Аноним 19/03/19 Втр 17:57:12 1367127210
>>1367126
>Это все и без тебя знают
То есть, тебе можно пороть всякую бессодержательную херню, а мне нет? Нет, ты заткнись.
Аноним 19/03/19 Втр 17:58:54 1367128211
>>1367118
Монада это мосив, а это
>моноид в моноидальной категории эндофункторов
всего лишь базовые понятия из алгебры без особенной глубины, которыми ты можешь вечатлить только даунов из /pr.
Аноним 19/03/19 Втр 17:59:51 1367129212
>>1367128
>мосив
Я конечно не даун из /pr, но я впечатлён.
Аноним 19/03/19 Втр 19:11:46 1367164213
Аноним 19/03/19 Втр 19:56:52 1367188214
>>1366767
Смотри, например, в джаве паттерен наблюдатель реализуется с помощью классов, это особым образом организованные классы, паттерен наблюдатель это не какая-то встроенная в джаву вещь, это прием программирования.

Монады и функторы организуются в хаскеле с помощью классов типов, это просто специальные классы типов, это не какая-то встроенная в язык вещь, это просто прием программирования, поэтому, можно сказать, что это паттерены. Вот что имел в виду.
Аноним 19/03/19 Втр 20:39:45 1367209215
>>1367128
>Монада это мосив,
Все массивы это монады, но не все монады это массивы.
Аноним 19/03/19 Втр 21:46:57 1367234216
>>1367112
>Монада - это не тайпкласс уже?
Нет.
Аноним 19/03/19 Втр 21:47:52 1367235217
>>1367126
>Только некоторые школьники думают, что на нём академики пишут.
А некоторые школьники не следят за публикациями по CS за последние, гхм, 25 лет.
Аноним 20/03/19 Срд 01:37:48 1367342218
>>1367188
У классов ООП и тайпклассов хаскеля из общего только 5 букв: к, л, а, с, с.

Различия между паттернами в ООП и манатками следующее.

Паттерны в ООП - это часть задуманной архитектуры (шаблоны проектирвоания). ООПист сидит и думает: агааа, тут нужно заебенить изменяемое поведение, значит тут визитор, тут нужна композиция объектов, хуяк, DI навставляю итд.

Функциональщик измышляет композицией функций. Именно композицию и можно назвать шаблоном проектирования в ФП. Но, нахуя, если композиция - суть программирования в любом подходе. Он, не думает "тут у нас побочные эффекты, заебеню-ка я манаду, или аппликативный функтор", тем более, что написать код для монадки еще пол дела: попробуй докажи, что не верблюд, и твоя реализация удовлетворяет всем законам, иначе соснешь в продакшене. Функциональщик собирает композицию функций, при этом у него иногда получаются до боли знакомые комбинаторы (байнд, например) и он с удовольствием этим пользуется, получая нахаляву еще пару-тройку комбинаторов.
Аноним 20/03/19 Срд 06:11:35 1367358219
>>1367342
Ну на деле современный функциональщик (хаскеллист) берёт либу типа mtl или capabilities (если он совсем продвинутый), ебенит монадный стек через трансформеры и дерайвит всевозможные инстансы, чтобы бесплатно получить комбинаторы и их писать. Я вообще не помню, когда бы мне приходилось писать прямо свой оригинальный инстанс монад или аппликативов.
Аноним 20/03/19 Срд 07:02:48 1367367220
>>1367364
Да ты охуел рекламировать свой местячковый веборасточят в моём хаскелл-треде?
Аноним 20/03/19 Срд 07:13:48 1367369221
>>1367364
конфопидоры - не люди
Аноним 21/03/19 Чтв 01:25:59 1367888222
wingside.jpg (87Кб, 900x600)
900x600
Хуясе тут ньюфагов развелось. Да еще со всякими страданиями. Ладно, как дедушка хаскельдрочерства, поделюсь советами дедушки как не страдать.

1. Не пытайтесь устанавливать ghc или платформу вручную. Я не могу придумать ни одной причины, по которой ньюфагу потребовалось бы качать дистрибутив ghc. Используйте Stack https://haskellstack.org Про cabal-install вообще забудьте пока не узнаете про сэндбоксы, иначе рано или поздно разнесёте систему и вам придётся всё переинсталлировать. Впрочем знать что-то про сэндбоксы вам нахрен не нужно, просто используйте Stack там всё есть и он просто работает, там уже всё придумали за вас.

2. Не создавайте проекты вручную и не редактируйте вручную cabal-файлы. Есть команда stack new и файл package.yaml, из которого hpack сгенерирует всё необходимое, причем в случае stack-а, вам не нужно знать, что такое hpack. Нет, если вам хочется вручную указывать всё модули своего проекта и потом каждый раз править .cabal, когда вы что-то рефакторите, то пожалуйста, но такой хуйнёй даже джависты не занимаются, они давно придумали IDE для этих целей.

3. Кстати, используйте IDE. И нет, блядь, не Leksah. Скачайте что-нибудь современное и адекватное, например Visual Studio Code, скомпилируйте https://github.com/haskell/haskell-ide-engine (stack-ом, естественно, как написано в их документации, а не ручками) установите плагин Haskell Language Server и будет вам шастье. Еще есть очень полезная команда "stack ghci", которую следует запускать в окне терминала этого самого Visual Studio Code, чтобы можно было быстро тестировать ваши программы и команда :r внутри ghci, чтобы перезагружать отредактированные исходники. И если вы под виндой, используйте stack ./install.hs hie-8.6.4, чтобы использовать GHC 8.6.4, потому что в GHC 8.6.3 серьёзно накосячили и он под виндой подвисает.

4. Не используйте стандартную прелюдию. Особенно, если вы не знаете, чем String в Хаскелле отличается от String в Джаве. Вообще, поставьте NoImplicitPrelude в своём шаблоне для новых проектов и используйте вместо неё rio https://github.com/commercialhaskell/rio В прелюдии нет ничего плохого и я сам её никогда не отключаю, но я - дедушка, мне можно, а вот вам она нахрен не нужна, будете только слёзы и сопли по клавиатуре размазывать от того, что ваш говнокод на Хаскелле внезапно окажется в 10 раз медленне аналогичного говнокода на Питоне.

5. Вообще, прочитайте всё, что написано в rio https://github.com/commercialhaskell/rio и сделайте именно так. Пока вы ньюфаги и только изучаете Хачкель, у вас нет никаких причин делать что-то иначе.

6. Пишите на идиоматичном Хаскелле. Пытаться эмулировать на Хаскелле императивные алгоритмы используюя IORef - плохая идея, особенно если вы не знаете, что IORef боксит значения, а если вы не знаете, что modifyIORef - ленивая, то вообще пиздец. Да, на Хаскелле можно заниматься императивным программированием и низкоуровневыми оптимизациями, но пока вы не умеете читать Core Language, вам лучше вообще туда не лезть, в 99% случаев компилятор сделает это лучше, чем вы.

7. Освойте такие инструменты как criterion и weigh. Да, Хаскель сука быстрый, как С++. Но это декларативный язык и он использует очень много черной магии, чтобы превратить ваши декларативные описания в последовательность процессорных команд. И если ты ньюфаг и не можешь знать как твоя писанина транслируется в ассемблер и почему какая-то хуйня может быть оптимизирована, а какая-то - нет, просто используй criterion и weigh для отслеживания производительности.
Аноним 21/03/19 Чтв 02:37:54 1367896223
>>1367102
Он абсолютно прав. Моняды и функторы являются паттеренами на которых построены практически все интерфейсы хачкельбиблиотек. Вопрос лишь в том, являются ли эти паттерны первоклассными, т.е. выражаются ли они средствами языка. В случае ООП - нет. Т.е. какой-нибудь ОО-синглетон - это просто какой-нибудь AbstractSingletonProxyFactoryBean, его семантика описана в документации, она, так сказать, воображаемая. А в случае Хачкеля большинство паттернов описываются и чекаются самим языком. Именно поэтому Хачкель так хорош. Когда я вижу монаду или функтор, мне не надо лезть в документацию, я знаю, каким правилам подчиняется данная конструкция, они формализированы на уровне языка. Когда я вижу AbstractSingletonProxyFactoryBean, мне надо разбираться, что имел ввиду автор, потому что язык мне не скажет ничего, мне надо понимать кучу скрытых правил, как их правильно использовать.
Аноним 21/03/19 Чтв 18:44:08 1368095224
>>1367888
>4. Не используйте стандартную прелюдию.
Вот именно поэтому и следует использовать скалу\кложу\эликсир, а сабж оставить академикам.
Аноним 21/03/19 Чтв 18:48:37 1368096225
>>1367896
Блядь, а ты еще тупее него.

Во-первых, я тем постом как бы намекал, что монада - это паттерн программирования вообще, необязательно программирования, а уж какими средствами он выражается в конкретном языке - это дело десятое. Переводя на язык ООП, это как в ответ на "билдер - это паттерн" писать "нет, билдер это же просто класс))".

Во-вторых,
>Когда я вижу монаду или функтор, мне не надо лезть в документацию, я знаю, каким правилам подчиняется данная конструкция, они формализированы на уровне языка
- тупорылая манька, иди хаскельвики читай, monad laws у него реализованы на уровне языка, угу. Обоссал тебя.
Аноним 21/03/19 Чтв 21:34:16 1368151226
>>1368095
>кложу\эликсир
Динамикодрисня не нужна.
Аноним 21/03/19 Чтв 21:53:41 1368159227
>>1368096
> паттерн программирования
Сам термин придумал, сам

>"билдер - это паттерн" писать "нет, билдер это же просто класс))"
Ебать логика у тебя.

Билдер - это шаблон проектирования. ПирожокБилдер - это конкретный класс, созданный по шаблону Билдери то не факт.

Функтор - это тайпкласс, в простонародии интерфейс. Functor [] - реализация этого интерфейса для списка. Где тут, блять, ты узрел шаблон проектирования?
Аноним 22/03/19 Птн 11:57:34 1368378228
>>1343135 (OP)
Я не могу въехать где в физической реализации функционального программирование имеется тот самый стейтлесс о котором все так радостно воркуют.

Какая принципиальная разница между тем что у нас есть условные контейнеры в памяти, к которым обращаются функции, и когда у нас есть общая среда где контейнеров нет но всё равно есть постоянно модифицируемые сущности?

У меня после курса архитектуры компьютера такое чувство что меня подъебать пытаются.
Аноним 22/03/19 Птн 13:23:24 1368405229
krnc.jpg (18Кб, 340x255)
340x255
>>1368378
>У меня после курса архитектуры компьютера такое чувство что меня подъебать пытаются
Так и есть. Не ведись на хайп гуманитариев-функциональщиков. В жопу трахаться не так стыдно, как быть функцинальщиков.
Аноним 22/03/19 Птн 13:31:00 1368408230
>>1368405
Ну как сказать, мне наоборот в целом их подход нравится.
Однако этот момент со стейтами прям коробит. Я ещё могу понять маняпуляции вокруг того что I/O - вынужденное "зло" относительно чистых функций. Но когда мне пишут про отсутствие состояний при этом имея сущности в локальной среде, целые хранилища с правилами и даже прямые модификациями как ОЗУ так и файловой системы - уж извините, но тут что-то не вяжется.
Аноним 22/03/19 Птн 14:07:22 1368437231
>>1368378
Как ФП может сущевствовать без стейтлесса? На этом же он и основан: функция должна переделывать одни данные в другие, а не изменять состояния и создавать побочные эффекты. В этом же и есть суть - между функциями и данными нет никаких границ, это одно и тоже.
Аноним 22/03/19 Птн 14:25:03 1368446232
>>1368408
Реальный мир не так идеален, как фантазии функциональщиков.
22/03/19 Птн 15:33:22 1368469233
Аноним 22/03/19 Птн 15:42:20 1368477234
>>1368151
В реальном мире (к счастью или к сожалению) нужна.

>>1368378
10 студентов-байтоебов из 10, лол. А если спуститься еще ниже, то окажется, что как раз никакого стейта нет, одни гейты да датафлоу. У тебя нет такого чувства, что тебя подъебать пытаются? ;)
Погугли, что такое "абстракция".

>>1368408
Ты можешь смоделировать твои побочные эффекты так, что при формальном описании языка они будут выглядеть (и вести себя, и описываться) как чистые функции. Тогда ты можешь доказывать о них разные утверждения как о чистых функциях, и ничего не сломается.
Аноним 22/03/19 Птн 16:52:22 1368494235
>>1343135 (OP)
Хаскель внезапно годнота.
Хочу сделать какой нибудь проект но хз что делать.
Аноним 22/03/19 Птн 17:15:03 1368506236
>>1368477
>А если спуститься еще ниже, то окажется, что как раз никакого стейта нет, одни гейты да датафлоу
Как раз там вполне себе конкретные состояния же, на физическом уровне прям.
Аноним 22/03/19 Птн 17:16:31 1368508237
>>1368477
>смоделировать твои побочные эффекты так, что при формальном описании языка они будут выглядеть (и вести себя, и описываться) как чистые функции
Вот так норм, странно что об этом в обучательных книгах не пишут. Даже в тех, что парадигмы программирования рассматривают не наблюдал такой оговорки.
Аноним 22/03/19 Птн 17:18:53 1368509238
>>1368477
> Ты можешь смоделировать твои побочные эффекты так, что при формальном описании языка они будут выглядеть (и вести себя, и описываться) как чистые функции.
Как это делать? Я пиздос тупой и не понимаю как.
Аноним 22/03/19 Птн 17:18:53 1368510239
Хаскель - это конечно интересно, но фронтенд компилятора (и тулинг в целом) - говно полное. Как и производительность.

На скале и расте с этим все сильно лучше, так что перекатываемся в тематические треды, господа.
Аноним 22/03/19 Птн 19:28:39 1368557240
>>1367358
>Ну на деле современный функциональщик (хаскеллист) берёт либу типа mtl или capabilities (если он совсем продвинутый), ебенит монадный стек через трансформеры и дерайвит всевозможные инстансы, чтобы бесплатно получить комбинаторы и их писать. Я вообще не помню, когда бы мне приходилось писать прямо свой оригинальный инстанс монад или аппликативов.


В джаве тоже можно использовать библиотеки и фрэймворки, и особо над собственной реализацией паттеренов особо не заморачиваться
Аноним 22/03/19 Птн 19:30:44 1368558241
Аноним 22/03/19 Птн 19:32:11 1368559242
Аноним 22/03/19 Птн 19:55:35 1368567243
>>1367888

Напиши хоть один серьезный пример, где у хачкеля производительность на уровне плюсов
Аноним 22/03/19 Птн 20:09:03 1368576244
>>1368506
Ну, я не специалист во всех этих сыркуитах, но нет, ты же там коннектишь входы@выходы, нанды в ксоры пихаешь, ну и так далее. На физическом уровне у тебя напряжение, чтобы из него мутабл целл сделать, это надо уже явно ее построить: https://en.wikipedia.org/wiki/Flip-flop_(electronics)

>>1368508
Хз, в любой книжке по сабжу об этом написано. Ты по-моему путаешь моделирование грязноты через манатки или линейные типы и написание логики на чистых функциях
Аноним 22/03/19 Птн 20:23:05 1368585245
5633.111.png-24[...].png (30Кб, 1022x465)
1022x465
>>1368506
У меня от тебя rising edge of signal и clocks domain crossing
Аноним 23/03/19 Суб 10:51:07 1368796246
15531695282970.jpg (22Кб, 400x400)
400x400
>>1367888
Так нахуя же везде пишут "скачайте платформу, затем cabal install mamuebal zaloopa-14.88", даже без сандбоксов, если это 100% нерабочий вариант? Это юмор какойто или что? Я реально думал, что эти ваши хачкели просто не работоспособны, пока не попробовал stack.
Аноним 23/03/19 Суб 13:15:25 1368835247
>>1368557
Звучит сомнительно, но я не джавист, так что не знаю.
Аноним 23/03/19 Суб 13:17:53 1368836248
>>1368408
Попробуй мысленно отделять интерфейсы от реализации. На уровне языка (в денотационной семантике) и правда никаких состояний нет. Просто зависимости между данными. Ясное дело, что по факту без стейта жить невозможно, просто им занимается компилятор, а не программист.
Аноним 23/03/19 Суб 14:18:43 1368846249
>>1368796
>cabal install mamuebal
Проиграл.

Просто книжки же давно вышли.
Аноним 24/03/19 Вск 07:46:00 1369186250
Аноним 24/03/19 Вск 10:04:27 1369216251
>>1369186
Если строго нужна установка пакета кабал в глобальный неймспейс, типо того же идрис, то просмотри в сторону nix. Он позволяет это сделать без геморроя и засорения глобального неймспейса чем-то кроме самого нужного пакета.
Аноним 24/03/19 Вск 13:24:49 1369279252
>>1369186
Ну так это ж вообще агда, они ж там все ебанутые.
Аноним 24/03/19 Вск 14:12:04 1369299253
>>1369216
Плюсадин. Не знаю, зачем товарищи "академики" везде суют кабал, но Nix - это жизнь. Лучше потратить лишние пару суток на то, чтобы разобраться, но не гадить в систему и не испытывать проблем с зависимостями. Тут, правда, есть подвох, который заключается в отжирании никсом места в долговременной памяти, но если научиться чистить мусор, то и с этим можно жить.
Аноним 24/03/19 Вск 14:56:48 1369316254
>>1369299
>>1369216
Двачую, сижу на никсосе и пишу хэлловорлды на хацкеле.
Правда я хз как запустить hie с вскодом из-под никс-шелла, чтобы он видел сторонние либы.
Аноним 24/03/19 Вск 15:11:36 1369326255
Аноним 24/03/19 Вск 16:51:09 1369386256
>>1367888
> скомпилируйте https://github.com/haskell/haskell-ide-engine (stack-ом,
Хоспаде, какой ебаный ад этот ваш HIE. Уже с час конпеляется, два разных GHC поставил, причем второй походу из исходников собирает. А не, вроде что-то высрал
Copied executables to /home/canterel/.local/bin:
- hie
- hie-wrapper
# stack (for hie-8.4.4)
# stack (for hie-8.4.4)
Build completed in 35m29s
И это еще не все, судя по гайду. Индусам, которые это вымутили, надо настучать хуем по лбу и отправить улицы подметать. Несколько гигов хуеты ради IDE-плагина, ебаный рот этого казино...
Аноним 24/03/19 Вск 16:52:45 1369387257
>>1369386
Да уж, вот бы можно было просто скачать емакс с автокомплитом, форматтером и подсказками для типов.
Аноним 24/03/19 Вск 17:09:54 1369392258
Аноним 24/03/19 Вск 17:19:59 1369395259
>>1369392
Пздц, буду знать, спс...
Аноним 24/03/19 Вск 18:17:59 1369430260
>>1369326
он у меня с ним и стоит. Компилировать и запускать свои хелловорлды с либами я могу, а хие кидает ошибку. Мне кажется, у меня в шелле один ghc, а хие использует другой.
Аноним 24/03/19 Вск 18:19:08 1369431261
>>1369430
>в шелле один ghc, а хие использует другой
Очень может быть
Аноним 24/03/19 Вск 18:34:38 1369442262
>>1369431
а как это исправить?
Аноним 24/03/19 Вск 18:47:36 1369451263
>>1369442
Не использовать HIE. Он всё равно тормозной и ломается
Аноним 24/03/19 Вск 18:54:52 1369460264
>>1369451
> Не использовать HIE. Он всё равно тормозной и ломается
А что тогда использовать? Для хачкиля есть вообще нормальные иде?
Аноним 24/03/19 Вск 18:55:04 1369461265
>>1369451
ну а что тогда использовать?
Аноним 24/03/19 Вск 18:57:31 1369462266
>>1369461
Emacs + haskell-mode + company-ghci
Аноним 24/03/19 Вск 19:07:22 1369466267
>>1369462
уж лучше с вима без плагинов писать, чем в емаксе противном
Аноним 24/03/19 Вск 19:10:07 1369467268
Аноним 24/03/19 Вск 22:31:49 1369599269
Аноним 25/03/19 Пнд 16:41:35 1369853270
Аноним 25/03/19 Пнд 17:36:02 1369876271
>>1369853
Ты ещё спроси, работает ли это на PS4
Аноним 25/03/19 Пнд 19:00:34 1369921272
>>1369853
Ну, емакс точно работает и в винде
Аноним 25/03/19 Пнд 19:42:55 1369935273
Аноним 25/03/19 Пнд 23:44:24 1370097274
1364944217714.png (763Кб, 722x947)
722x947
>>1368095
Перлюдии больше лет, чем тебе, хуле ты хотел? И я уже писал, что в самой Прелюдии нет ничего криминального, просто есть некоторые грабли, на которые ньюфаги могут наступить, вроде ленивого foldl, ленивого IO, те же String, из названия которых ньюфаг может подумать, что это такой же String, что и в Джаве/Питоне, а потом очень неприятно удивиться производительности своей программы для обработки текста. Причем про всё это написано в документации, но как показывает практика вопросов на Stackoverflow, документацию никто не читает.

Что касается Скалы, то в ней настолько охуенная "стандартная прелюдия", например, библиотека коллекций, что только замена её на более вменяемую дала буст в 25% (https://www.scala-lang.org/blog/2017/02/28/collections-rework.html), причем авторы еще не пользовались специализацией. И при этом она существенно сложнее, со всеми своими CanBuildFrom и <хуйпизда>Like. Для ньюфагов самое оно, да.

>>1368510
>На скале и расте с этим все сильно лучше
Вот про тулинг в Скале ты мне не пизди, я с этим языком не первый год работаю. С фронэндом там тоже настолько всё лучше, что в Idea до сих пор не могут запилить провеку синтаксиса, которая не подчёркивала бы красным вполне валидные и компилируемые Скала-выражения. И что-то мне подсказывает, что в поддержку Scala в Idea было ввалено побольше ресурсов, чем в тот же HIE.

>>1368567
https://www.fpcomplete.com/blog/2017/07/iterators-streams-rust-haskell c_cheating там, конечно, победила, но только из-за векторизации, которую в Хаскель не завезли (в Rust, судя по результатам бенчей, тоже). Забавно, что автор неверно предположил, что это из-за конвертации в цикла downward-counting loop. Нет, конвертация downward-counting loop сама по себе такого выигрыша не даст, а вот векторизация примерно так себя и ведёт (учите ассемблер и читайте дампы). Вообще, если ты знаешь, как работает оптимизатор Хаскеля, не так сложно заставить его генерировать что тебе надо. Если ты не знаешь, как работает оптимизатор плюсов, то и на плюсах ты быструю программу хуй напишешь. По сложности они примерно одинаковы.

>>1368796
Так было до появления Стека.
>если это 100% нерабочий вариант?
Он не на 100% нерабочий. Если ты скачаешь ghc, установишь cabal-install, alex и happy (не знаю, входят ли они в поставку, несколько лет без Стека ничего не собирал), и просто сделаешь cabal install mamuebal zaloopa-14.88, то всё сработает. Проблемы начнутся позже. Дело в том, что не сэндбокснутый cabal генерирует план исходя из того, что у тебя уже установлено в гобоальной базе, обращаясь при этом к нелегальным интернет-казино для генерации случайных чисел. В итоге ты можешь закончить с таким набором пакетов, для которого невозможно удовлетворить констрейнты очередного инсталлируемого пакета. И тебе никто не сможет помочь, потому что у тебя будет свой уникальный набор версий пакетов, зависящий от того, в каком порядке ты их устанавливал. Чтобы таких ситуаций не возникало, придумали Stack - там фиксированный глобальный план, построенный для всех пакетов, включенных в Stackage.

>>1369186
В Агда-курятнике своя атмосфера. Там сидят 3.5 академика, видимо им похуй на проблемы ньюфагов.

>>1369386
Добро пожаловать в мир компилируемых языков. Если бы ты попробовал собрать llvm, или какой-нибудь еще плюсатый-полосатый, получил бы то же самое.
>два разных GHC поставил
По ходу ты ебанул stack ./install.hs cabal-build-all. Нет, не надо так делать, он тебе установит все версии GHC, придуманные с рождения Саймона Пейтон-Джонса. Запускай только "stack ./install.hs hie-8.4.4". И не надо делать "stack ./install.hs build-doc-8.4.4", документация есть в интернетах, не надо её локально билдить.

>>1369430
>Мне кажется, у меня в шелле один ghc, а хие использует другой.
Не ставь ghc отдельно! Только через stack. Запускать через stack ghci, он запустит тот, который у тебя указан в резолвере твоего проекта.

>>1369387
Можно. Если человек в состоянии собрать и настроить хаскельмод для емакса, то это уже не ньюфаг и мои советы ему нахуй не нужны.

>>1369935
Да, но после перехода на Linux у меня лично жопаболи стало меньше. Как я уже писал, GHC 8.6.3 выпустили с поломанный линкером под винду: https://gitlab.haskell.org/ghc/ghc/issues/16057 (правда уже починили, но осадочек остался). Просто вдумайся в это, продукт идёт в релиз с багом на платформе, заявленной как Tier 1 (бла-бла Tier 1 platforms are our top priority. We only release GHC when they all work). Я вообще охуел, для меня это сигнал о наличии какой-то серьёзной методологической проблемы. Остаётся надеяться, что это временная хуйня, связанная с недавним переходом к сокращённым релизным циклам и больше повторений подобных косяков не будет.
Аноним 26/03/19 Втр 01:40:35 1370134275
>>1370097
>Не ставь ghc отдельно! Только через stack. Запускать через stack ghci, он запустит тот, который у тебя указан в резолвере твоего проекта.
Что-то стэк кидается ошибками на моем никсосе, ну нахуй его, буду сидеть с вима через nix-shell. Мб когда-нибудь послушаюсь твоего совета и попробую стэк, но пока мне и nixa хватает.
Аноним 26/03/19 Втр 02:13:51 1370141276
Почему все функции в хацкеле считаются чистыми? Почему, если функцию обернуть в монаду, то она станет чистой? К примеру, вызовем readFile с одинаковым инпутом, но потом удалим файл. Ведь хоть снаружи результаты этих функций выглядят одинаково Maybe a, внутри они разные Just a | Nothing, значит функция дала разные результаты под одинаковый инпут.

Как я понял, монада это тайпклас, да? А IO и Maybe его реализуют.
Аноним 26/03/19 Втр 05:29:04 1370154277
>>1370134
Ясен пень, если использовать nix + cabal, никакие стэки не нужны вообще.
Аноним 26/03/19 Втр 05:31:06 1370155278
>>1370141
>Как я понял, монада это тайпклас, да? А IO и Maybe его реализуют.
Да.
>Почему, если функцию обернуть в монаду, то она станет чистой?
Потому что монадические вычисления следует считать обыкновенными структурами данных. Значение типа IO a - это как бы "список дел", который ты можешь куда-то передать или откуда-то получить. С этой точки зрения, ты просто вычисляешь конечный список дел main чистыми функциями, а потом передаёшь его на исполнение в рантайм.
Аноним 26/03/19 Втр 05:33:33 1370156279
>>1370097
>Если человек в состоянии собрать и настроить хаскельмод для емакса, то это уже не ньюфаг
Если ньюфаг не может прочитать инструкцию и сделать по инструкции, то мне страшно представить, что такое "ньюфаг". Это тот, для кого надо туториалы начинать со слов "включите компьютер"?
Аноним 26/03/19 Втр 08:00:16 1370175280
Аноним 26/03/19 Втр 16:10:25 1370430281
А есть чо по ATOM'у? У меня на нем и Идрис и агда работают, а для хаскелля нагуглил какую-то ебань, оно мне весь атом перепердолило и вроде так нормально и не заработало.
Аноним 26/03/19 Втр 16:28:04 1370437282
>>1370430
Даже у идриса тулинг лучше, чем у хацкеля
Аноним 26/03/19 Втр 16:47:19 1370443283
>>1370097
>Перлюдии больше лет, чем тебе, хуле ты хотел?
Да дело даже не в этом, как мне кажется, а в том, что она изначально для другого делалась.

>замена её на более вменяемую дала буст в 25%
Ну давайте еще байтики и миллисекунды считать, ага.

С тем, что они мудаки, что переписывали ее кучу раз, я не спорю (хочешь стабильности(тм) и интерпрайза(с) - юзай кложу, ни одного ломающего изменения за 10 лет ну и в элике думаю тоже норм будет, хотя надо еще подождать-посмотреть, потому что эти языки изначально делались для того, чтобы хуяк-хуяк и динамическая опердень, а не для того, чтобы писать пейперы. сова@глобус)
Аноним 26/03/19 Втр 22:42:15 1370600284
>>1369599
> ghcid https://github.com/ndmitchell/ghcid
Шляпа.
>>1369462
> Emacs + haskell-mode
А вот это годно. Работает на винде, проверил.
>>1370437
> Даже у идриса тулинг лучше, чем у хацкеля
Для Идриса в атоме вообще охуеннейшая интеграция + все ставится в несколько кликов мышкой без малейшего пердолинга, при том, что Идрис интересен 3.5 аутистам. А для хачкеля под атом вообще ничего хорошего, при том что на нем полно народу пишет. Парадокс.
Аноним 27/03/19 Срд 17:48:17 1370895285
Здраститя. Такой вопрос - как одной коммандой загрузить все модули либы или как это правильно назвать? Пример - http://hackage.haskell.org/package/llvm-hs-pure там куча модулей:
Modules
LLVM
LLVM.AST
LLVM.AST.AddrSpace
LLVM.AST.Attribute
LLVM.AST.COMDAT
LLVM.AST.CallingConvention
бла бла... Вот как их одной коммандой в IDE загрузить? Я к примеру делаю :m LLVM.AST, но функции из других модулей не доступны, пока их так же явно через :m не загрузишь.
Аноним 27/03/19 Срд 17:55:46 1370900286
>>1370895
А нахуя? У тебя LLVM.AST предоставляет апишечку к этим конструкторам.
Аноним 27/03/19 Срд 18:00:28 1370905287
>>1370900
> У тебя LLVM.AST предоставляет апишечку к этим конструкторам.
Так функции не видны, пока явно не загрузишь модуль, где они прописаны. Я так и подумал, что если LLVM.AST загрузить, типизация всех его подмодулей так же будет доступна. Проверил - хуй там плавал.
Аноним 27/03/19 Срд 19:10:21 1370946288
Haskell-mode на убунте не работает. Пишет, нет такой программы ghc. И на самом деле, хачкель, поставленный через стек, запускается только через stack ghci. И как быть? Прописывание полного пути до ghc не помогает. На винде все просто работает, а с бубунтой чет борода...
Аноним 27/03/19 Срд 19:48:50 1370971289
>>1370946
(setq haskell-process-type 'stack)
Кэп
Аноним 27/03/19 Срд 20:24:22 1370987290
>>1370971
И куда конкретно в .emacs это вставлять? Пробовал по-разному, ошибку пишет
Аноним 27/03/19 Срд 20:30:10 1370989291
>>1370971
Нашел, на самом деле нужно писать (setq haskell-process-type 'stack-ghci)
Аноним 05/04/19 Птн 08:03:17 1375280292
>>1370946
На что тебе haskell-mode? Есть же intero
Аноним 05/04/19 Птн 18:32:37 1375559293
>>1343135 (OP)
Как в хаскеле сделать переадресацию с одного адреса на другой? В пхп всё просто
header('Location: http://google.com');exit;
А тут как?
Аноним 05/04/19 Птн 19:45:29 1375593294
>>1375559
Какие библиотеки/фреймворки ты используешь?
Аноним 05/04/19 Птн 21:50:10 1375648295
Аноним 05/04/19 Птн 22:59:19 1375708296
Аноним 06/04/19 Суб 09:01:30 1375826297
Есть у меня один старый проект на хачкиле, в котором код полное говно. Хочется его зарефакторить красиво. Что можно почитать на тему проектирования и архитектуры?
Аноним 06/04/19 Суб 09:02:31 1375828298
Аноним 06/04/19 Суб 09:04:19 1375830299
Аноним 06/04/19 Суб 09:08:47 1375833300
Аноним 07/04/19 Вск 14:19:28 1376687301
Скажите, у функционалки есть будущее или императивка все еще рулит?
Аноним 07/04/19 Вск 14:25:27 1376691302
>>1376687
>Скажите, у функционалки есть будущее или императивка все еще рулит?
Функц. Программирование началось еще с 58 года, 4 года после выхода Фортрана. Как видишь, живет, но хуево живет.
Будущее есть, но всегда второй эшелон
Аноним 10/04/19 Срд 07:52:28 1378156303
>>1347012
> спрашивает "что за буква А перевёрнутая?"

Сука, как же я проорал...
Аноним 10/04/19 Срд 08:25:32 1378165304
Аноним 10/04/19 Срд 08:55:17 1378175305
>>1343135 (OP)
Правда ли, что все хачкелисты - пидоры, а ровные пацаны используют эрланг?
Аноним 10/04/19 Срд 09:03:56 1378176306
10/04/19 Срд 09:08:00 1378177307
Аноним 10/04/19 Срд 09:27:23 1378180308
>>1378175
На эроанге пишут только опердени. Это не хорошо и не плохо, просто так сложилось.
Аноним 10/04/19 Срд 09:30:13 1378181309
>>1378180
Хм, так это значит, что всегда есть работа.
Аноним 13/04/19 Суб 13:16:14 1380248310
Теория типов говно, парадокс Рассела выдуман, а пропозициональной логики достаточно чтобы описать любую формальную символьную систему. Дискасс.
Аноним 13/04/19 Суб 22:09:51 1380506311
>>1380248
Ты прав, молодец, возьми с полки пирожок.
/дискас
Аноним 14/04/19 Вск 17:37:08 1380882312
>>1380248
t. Иван, отчислен после первого семестра мехмата хуй-пиздюйского государственного университета
Аноним 16/04/19 Втр 09:54:49 1382154313
15535178022280.jpg (112Кб, 706x471)
706x471
>>1380248
> Теория типов говно, парадокс Рассела выдуман, а пропозициональной логики достаточно чтобы описать любую формальную символьную систему. Дискасс.
Аноним 21/04/19 Вск 12:34:26 1385299314
Чем парсить HTML и потом кверить его, чтобы было быстро?
Аноним 21/04/19 Вск 12:39:10 1385301315
Аноним 21/04/19 Вск 15:37:59 1385852316
>>1385301
Тащем-то карп - это кложа с линейными типами и компиляцией в нативный код, какие ж тут манатки?
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Топ тредов
Избранное