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


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

<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
129 17 41

Хаскель Тред - ньюфаг едишн /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
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Топ тредов
Избранное