Сохранен 235
https://2ch.hk/pr/res/2171218.html
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Haskell

 Аноним 01/10/21 Птн 01:12:08 #1 №2171218 
haskell.png
Предыдущий >>1880225 (OP) тонет, создаю новый.

Аноним 01/10/21 Птн 01:44:34 #2 №2171224 
И сразу вопрос, зачем я тред перекатываю, и сразу ответ. Мне, допустим, нужен менеджер памяти на Хаскелле и сам я заебусь его писать. Но я бы купил его создание за 50 рублей. С учетом моих требований и моих архитектурных соображений. Разумеется, в полное владение BSD-3.

Т.е. ты сможешь шлёпать своё авторство, но только под BSD-3 или аналогичную лицензию. Я хочу полностью выкупить этот код и сделать его open-source. И, разумеется, я хочу взаимодействия. Т.е. у меня есть хотелка для создания либы, но сам я не потяну, у тебя есть возможность её написать.

Деньги обсуждаемы. Я думаю, 50к - это просто хуйня, которую я выбрал от балды. Если надо поднять, то поднимай. Если это гораздо больше стоит, то так и пиши, что тебе это не интересно, но заодно напиши, за сколько денег ты готов работать. Не факт, что у меня столько есть, но мне чисто интересно.
Аноним 01/10/21 Птн 03:37:44 #3 №2171232 
>>2171224
Что такое менеджер памяти?
Аноним 01/10/21 Птн 14:18:19 #4 №2171509 
>>2171218 (OP)
Изучаю F# после многих лет поедания императивного говна на с++.
Потом планирую вкатываться в хаскель.
Пока самый большой вопрос у меня возникает в том, что как обрабатывать ошибки, кроме возвращения из всех функций optional ( Maybe в хаскел ).
Но такой подход кажется довольно сложным, т.к. приходится биндить все следующие функции к предыдущей и непонятно в каком мементе там зафейлится, либо каждую функцию делать принимающий optional и в каждой функции проверять вход, что тоже довольно геморно.

Как вообще делают товарищи хаскелисты в продакшен коде?
Аноним 01/10/21 Птн 15:29:09 #5 №2171575 
>>2171509
Что такое продакшн код?
Аноним 01/10/21 Птн 18:22:54 #6 №2171712 
>>2171575
Тот который не попадает в множество пет проектов.
Аноним 01/10/21 Птн 20:46:49 #7 №2171797 
>>2171509
Как и в любых языках: если эта ошибка "нормальный" результат функции - то Maybe или Either, если кровь-кишки-распидорасило - то кидай исключение.
Аноним 02/10/21 Суб 01:21:01 #8 №2171924 
>>2171509
>>2171797
Ну и если "ошибка" - это "нормальный" вариант, но подразумевается, что программист не должен постоянно проверять результат функции, а есть какой-то стандартный паттерн обработки такого результата (например, fail-fast для Maybe или бэктрекинг для монадического парсера), тогда или пили монаду вроде Monad Maybe, если она для твоего типа ещё не запилена, либо трансформер, если хочешь дать программисту выполнять какие-то еще монадические действия между биндингами.

Но именно к ошибкам вида "кровь-кишки-распидорасило" это не относится. Конечно, можно эмулировать систему исключений на трансформерах, но это ничего не даст. Потому что в языке уже есть исключения, причем даже асинхронные исключения, поэтому в продакшн коде всё равно придётся это учитывать и писать обработчик исключений. Т.е. даже очень чистый воображаемый ErrorT ничего не даст, один хуй, исключения придётся ловить.

Главное, не используй исключения для нормального flow-control. Тут как и в любых других языках: исключения - это именно что исключения. Они возникают когда что-то идёт не нормально, они должны случаться редко. И поэтому они медленнее, чем неглубокий монадический биндинг (но быстрее глубоких стеков трансформеров), и главное, они проще в использовании.

Если они тебе нужны, сразу юзай safe-exceptions либо исключения из unliftio, либо из RIO для конечных приложений. В исключениях из base есть некоторые грабли, как раз связанные с тем, что бывают асинхронные исключения их надо очень аккуратно обрабатывать.

Ну а если твои исключения - это не исключения, а норма, тогда монадка, да.
Аноним 02/10/21 Суб 10:28:43 #9 №2172032 
>>2171232
Классика жанра: вытягиваем хотелки из заказчика пыткой клещами всем двачем
Аноним 02/10/21 Суб 14:19:11 #10 №2172156 
>>2172032
Да он просто поржать пришел, я уже понял, что никому это не интересно, сам пишу. Хотелка одна - быстрее malloc и не зависеть от malloc, потому что хуй знает, что там на разных платформах вкомпиливается под видом malloc. И да, интересуют только 64-битные платформы. Так-то я уже сам начал потихонечку его писать. Вернее тесты производительности пока, чтобы понять глубину пиздеца с malloc и всякими примитивами Хаскеля.
Аноним 02/10/21 Суб 14:27:01 #11 №2172158 
>>2172156
А, переписываешь jemalloc на хачкиле. Похвально.
По сути, должно быть несложно - прост тред-сейф связный список свободных блоков.
Аноним 02/10/21 Суб 15:19:06 #12 №2172204 
>>2172158
jemalloc вроде тоже может под 32 бита работать. На 64-х битах можно еще сильнее ограничиться по выравниванию, ограничить переменную под размер блока 48-битами (один хуй нет столько памяти в компьютерах), а старшие, например, использовать для сохранения номера арены. Немного пожертвовать фрагментацией, создавая free-листы только для степеней двойки и использовать битовые операции вместо красно-черного дерева для поиска списка. Еще заточить под мелкие объекты (16 байт, у меня, скорее всего, таких много будет), ну и никто не заставляет повторять интерфейс malloc. Вместо мьютексов использовать спинлоки. Я не смотрел, что именно используется в jemalloc, но в классическом malloc есть мьютекс, это правильно с точки зрения ОС, но если подразумевается, что на серваке будет только моё приложение, то можно и в спинлоке покрутиться. Ну и количество арен и подобное сделать настраиваемым. Все эти универсальные маллоки пытаются быть очень умными и подстраиваться под любой характер нагрузки. А если сделать тупой аллокатор, который надо настраивать вручную, то может получится выиграть в скорости за счет его тупизны. И за счет отсутствия foreign call немного.
Аноним 02/10/21 Суб 15:45:13 #13 №2172227 
>>2172204
>ограничить переменную под размер блока 48-битами
Очень плохая идея, даже ядро процессора не знает как там адресное пространство мапится на физическую память, это дело mmu, а в конце адресного пространства обычно стек, 0xF...F и ниже.
мимокресты
Аноним 02/10/21 Суб 18:05:20 #14 №2172323 
Без названия (1).jpeg
>>2172204
Звучит как план
Аноним 02/10/21 Суб 21:03:15 #15 №2172461 
>>2172227
Причём тут это вообще? В этой переменной должен храниться размер блока, для этого не нужно больше 48 бит, в оставшейся части можно хранить доп. информацию.
Аноним 25/10/21 Пнд 09:42:03 #16 №2192842 
Какой версией ghc сейчас актуально пользоваться? Или без разницы?
Аноним 13/11/21 Суб 19:21:05 #17 №2211455 
Анон, расскажи, пожалуйста, в чём прикол функционального программирования? Зачем учить хаскель, например? У меня вот в универе курс, рассказывают всё, кроме того, зачем собственно его учить. А если он не нужон, то зачем учить?
Аноним 13/11/21 Суб 19:32:20 #18 №2211469 
>>2211455
Потому что полезные фичи оттуда пиздят в практические языки.
Аноним 13/11/21 Суб 20:58:38 #19 №2211574 
>>2211455
-----> >>2176071 (OP)

> А если он не нужон, то зачем учить?
чтобы выебываться
Аноним 17/11/21 Срд 01:22:30 #20 №2214405 
1200px-Commutativediagramformorphism.svg.png
>>2171218 (OP)
Мне математики сказали, что в хаскеле нет категорий. Зачем тогда хаскелисты о них постоянно говорят?
Аноним 17/11/21 Срд 05:38:36 #21 №2214433 
>>2211455
Просто будет на что опереться. Ну типа расширяет границы сознания, в итоге ты сможешь решить какую нибудь задачу так, как никогда не решил бы, если бы не знал функциональщину. Я не тролю, у меня самого так было.
Аноним 17/11/21 Срд 12:12:23 #22 №2214678 
>>2214433
Вот так всё говорят, какими-то абстрактными словами о том что ФП добавляет в кругозор новые взгляды на жизнь и это охуенно, ты будешь мегапиздатым, но я так и ни разу не видел реального примера из жизни.
Аноним 17/11/21 Срд 23:36:43 #23 №2215509 
Как это вообще учить после императивщины? Янипонимаю нихуя.
Аноним 18/11/21 Чтв 00:13:42 #24 №2215529 
>>2215509
А должен понимать?
Аноним 29/11/21 Пнд 14:53:43 #25 №2225181 
Ребят, посоветуйте может литературы. Я почитал статью Пейтона-Джонса про STG А заодно про OutsideIn(X) и книжку про написание канпеляторов для ленивых фп-языков дикий кайф словил, мужик охуенные вещи пишет.
Собственно, интересует, есть ли более современные альтернативы STG или прикольные/полезные улучшения, не включенные в GHC?
Аноним 11/01/22 Втр 18:35:22 #26 №2262247 
Есть ли название для монад/функторов F : -> , которые для любого A : * дают тип, всегда хранящий необходимый минимум для вызова функции A -> ..., например A -> F B?
Например Maybe такой не является, если x : Maybe A, то x >>= f не всегда вызывает f т.к. x может быть Nothing.
Аноним 12/01/22 Срд 08:11:07 #27 №2262547 
>>2225181
https://gitlab.haskell.org/ghc/ghc/-/wikis/reading-list
Аноним 15/01/22 Суб 21:49:15 #28 №2266059 
Хотел попробовать хаскельь вне хелловродлров, например картинку через канни фильтр провести, но не смог установить нужные пакеты.
Аноним 26/01/22 Срд 18:50:19 #29 №2277900 
>>2211455
>>2214678
Программирование само по себе ничего не дает.
Гешефт ты получаешь, когда ДУМАЕШЬ над решением какой-то задачи.

Аноним 30/01/22 Вск 08:21:16 #30 №2281250 
Заебал какой-то токсичный пидорас из лиспотреда спроваживать. Таки ркпостну итт

Анон, насоветуй может есть какие-нибудь мастрид статьи, не слишком тухлые, по концепциям кложи/ФП. Может какое-нибудь сравнение ФП языков с императивными языками. Чтобы объективно и интересно.
Аноним 03/02/22 Чтв 16:07:34 #31 №2285674 
>>2172156
>всякими примитивами Хаскеля
В хаскелле нет примитивов
Аноним 08/02/22 Втр 21:00:35 #32 №2291140 
>>2266059
stack
Аноним 09/02/22 Срд 00:19:58 #33 №2291271 
11111.jpg
>>2171218 (OP)
Пацани, а нахуя нужон то этот ваш хаскель?
Аноним 09/02/22 Срд 11:48:55 #34 №2291469 
>>2291271
Программы писать.
Аноним 22/02/22 Втр 21:38:09 #35 №2304556 
>>2214678
НУ смари, ты хоть знаешь что такое ленивые вычисления? Нет? А знать надо, потому как в популярных императивных ОО другая система вычисления, это тоже знать надо. Если бы ты изучал хачкель хоть немного, то уже бы не задавался таким вопросом. Всё очень просто.
Аноним 23/02/22 Срд 08:39:37 #36 №2304706 DELETED
друзья, умоляю помогите деньгами на еду, прошу вас, спасибо огромное, карта:
5578855060743042
vladislav gurevich
Аноним 27/03/22 Вск 14:38:41 #37 №2324014 
>>2291469
Ну и как, много написали?
Аноним 27/03/22 Вск 14:43:02 #38 №2324015 
>>2304556
Ленивые вычисления, это когда что-то вычисляется только тогда, когда это действительно нужно. Абсолютно бесполезная ерунда, короче. Да и к тому же во время исполнения все это в любом случае транслируется в императивный ассемблер для аппаратной платформы. Хаскель это литералли мем, чтобы просто ньюфагов троллить. Как Gentoo.
Аноним 30/03/22 Срд 23:30:50 #39 №2326090 
>>2171509
Что за хуйню ты пишешь, если у тебя все функции могут возвращать ошибки?
Аноним 01/04/22 Птн 00:01:10 #40 №2326851 
2022-04-01-000036736x153scrot.png
>>2324015
> это литералли мем, чтобы просто ньюфагов троллить. Как Gentoo.
Стой, что?
Аноним 01/04/22 Птн 00:22:02 #41 №2326855 
>>2326851
Ну чтож, поведай нам как ты ТОЛЬКОВЫИГРАЛ!!1! от того, что у тебя система обновляется по несколько часов, а то и дней, изнашивая процессор постоянной загрузкой на 100% и заставляя тебя засыпать под шум вентиляторов.
Аноним 03/04/22 Вск 12:58:08 #42 №2328088 
>>2326855
Не надо нищебродских проекций, на моём рузене полная пересборка вообще всего установленного займёт часов семь, обновления обычно занимают час-другой по субботним утрам.

> изнашивая процессор
Мало того, что ты нищеброд с медленным железом, ты ещё и тупой. Процессор от 100% нагрузки не изнашивается, максимум, что от этого изнашивается - это подшипник в кулере, который стоит три тысячи рублей, но куда тебе три косаря сэкономить на завтраках.
Аноним 03/04/22 Вск 16:51:39 #43 №2328201 
>>2328088
> пересборка вообще всего установленного займёт часов семь
А, ну это совсем другое дело (нет).

>Процессор от 100% нагрузки не изнашивается
Ещё как изнашивается:
https://yarchive.net/comp/linux/cpu_reliability.html
Аноним 05/04/22 Втр 23:28:42 #44 №2329891 
>>2328201
> А, ну это совсем другое дело (нет).
Ты у мамы дурачок? Нахуя мне пересобирать весь установленный софт, если обновилась только небольшая его часть?

> https://yarchive.net/comp/linux/cpu_reliability.html
> Беспруфный вскукарек от жирного финнского тролля
Ну да, ты ещё сходи в /b/ пасты в тнн-тредах пособирай, вот там уж точно образец научной мысли.
Аноним 06/04/22 Срд 00:37:24 #45 №2329954 
>>2329891
Жирный финский тролль написал ядро системы, на которой ты сейчас сидишь. Так что в области информатики он поумнее нас с тобой будет.
Аноним 07/04/22 Чтв 14:10:15 #46 №2331062 
>>2329891
Явление такое есть
https://en.m.wikipedia.org/wiki/Electromigration
Аноним 13/04/22 Срд 19:08:29 #47 №2335158 
images.jpeg
>>2329954
А я твою мамку ебал, так что в области информатики я поумнее тебя буду.
Аноним 17/04/22 Вск 01:26:31 #48 №2337652 
>>2335158
Чё порвался то?
Аноним 17/04/22 Вск 09:47:11 #49 №2337764 
>>2337652
Ты что, зачем на двач заходишь, у тебя же с него ПРОЦЕССОР ИЗНОСИТСЯ.
Аноним 25/04/22 Пнд 18:39:53 #50 №2343976 
А что у хаскеля по скорости?
Аноним 25/04/22 Пнд 19:01:46 #51 №2344001 
>>2343976
Всё очень плохо, он исполняется внутри Java-машины.
Аноним 25/04/22 Пнд 20:30:14 #52 №2344041 
>>2343976
В большинстве случаев сравним по скорости с джавой. Ну это ещё от того как писать и оптимизировать зависит.
Аноним 26/04/22 Втр 00:13:19 #53 №2344201 
>>2344001
>он исполняется внутри Java-машины
Чё?
Аноним 26/04/22 Втр 00:24:21 #54 №2344211 
>>2344041
>>2344001

Омерзительно. До нормальной скорости довести никак нельзя?
Аноним 26/04/22 Втр 00:50:59 #55 №2344215 
>>2344211
Никак. Haskell это маня-язык, полностью состоящий из высокоуровневых математических абстракций. А для скорости нужны низкоуровневые операции.
Аноним 26/04/22 Втр 00:54:16 #56 №2344217 
>>2344201
Да. На самом деле Haskell это обычная Java, просто с другим синтаксисом.
Аноним 26/04/22 Втр 01:14:38 #57 №2344222 DELETED
Долучaйся!
Аноним 26/04/22 Втр 01:16:49 #58 №2344223 
>>2344217
>На самом деле Haskell это обычная Java, просто с другим синтаксисом.
На самом деле у тебя IT образование уровня /b/. Хаскель не Java, никогда не был и не будет Джавой, и вообще не имеет отношения к Джаве. Хаскель быстрее Джавы, а это значит, что он топ по производительности. Потому что быстрее Джавы только C# и компилируемые языки C/C++, Rust.

https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/haskell.html
Аноним 26/04/22 Втр 01:17:44 #59 №2344224 
>>2344215
Готов поставить два литра воздуха на то, что это можно как-то ускорить. В конце-концов, все эти абстракции в итоге разворачиваются в тот же асмокод
Аноним 26/04/22 Втр 01:42:43 #60 №2344231 
>>2344224
>все эти абстракции в итоге разворачиваются в тот же асмокод
Тот анон абсолютно безграмотен. Бесполезно использовать логику в споре с безграмотным человеком.
Аноним 26/04/22 Втр 12:21:28 #61 №2344396 
>>2343976
Он охуительно оптимизируется. Правда, чтобы наверняка хуярить оптимально, надо маленько разбираться, как он компилируется, плюс местами код изуродовать. Сама компиляция примерно такая, haskell -> core -> stg -> c-- -> (llvm/c/ncg) -> asm
Если не даун, то сможешь писать код, который выглядит просто и работает субоптимально (по сравнению с сишечкой).
Аноним 26/04/22 Втр 23:48:35 #62 №2344917 
>>2344396
>haskell -> core -> stg -> c-- -> (llvm/c/ncg) -> asm
Хуясе. Это баг или фича?
Аноним 27/04/22 Срд 01:20:15 #63 №2344955 
>>2344917
GHC современный умный компилятор. Хаскель самый продвинутый язык по фичам, в него добавляют самые современные концепции. Советую почитать книгу Параллельное и конкурентное программирование на языке Haskell. Автор книги один из разработчиков Хаскеля и он немного рассказывает о том как разрабатывают Хаскель.

https://www.haskell.org/ghc/
Аноним 27/04/22 Срд 13:36:22 #64 №2345174 
>>2324015
К слову, ленивость позволяет в разы упростить код. С ней трудно совладать и понимать, где она нужна, а где нет, но когда всё понял, код такой получается, что прямо в кайф.

мимо
Аноним 27/04/22 Срд 14:11:04 #65 №2345209 
>>2324015
Ленивость позволяет создавать циклические и бесконечные последовательности. Ленивость позволяет избегать лишних вычислений. Хаскель может вычислять и лениво и энергично.

>Да и к тому же во время исполнения все это в любом случае транслируется в императивный ассемблер для аппаратной платформы.
И что? Аргумент уровня /b/. Всё равно что есть муку и фарш, запивая водой, вместо жареных чебуреков или другой выпечки с фаршем, аргументируя тем, что всё равно состав одинаковый и в желудке всё переварится в единое. Очень глупый аргумент.
Ононим 29/04/22 Птн 13:22:23 #66 №2346596 
Предлагают работу хаскелистом за 500 usd. Сойдёт?
Аноним 29/04/22 Птн 19:35:24 #67 №2346920 
>>2324015
лол, эта ерунда даже на низком уровне используется.
Аноним 29/04/22 Птн 19:40:57 #68 №2346929 
>>2346596
Слишком высокая зарплата, скорее всего наебка.
Аноним 29/04/22 Птн 23:26:46 #69 №2347101 
>>2346929
Я джун, вообще говоря
Аноним 30/04/22 Суб 11:56:26 #70 №2347221 
>>2346596
Если бы я мог резко соскочить со своей работы, то я бы пошёл. Работаю за те же деньги и не прогреом.
Аноним 30/04/22 Суб 18:29:15 #71 №2347490 
>>2347221
По мне так маловато. С учётом налога выходит вообще где-то 420
Аноним 01/05/22 Вск 07:26:58 #72 №2347816 
>>2347490
Почему 420, когда 470
Аноним 01/05/22 Вск 15:13:30 #73 №2348018 
>>2347816
Потому что в РБ подоходный 13%. 435, если уточнять
Аноним 04/05/22 Срд 15:48:07 #74 №2350036 
>>2348018
Вот бы где-нибудь в пвт работку с хаскелем и без опыта
Аноним 04/05/22 Срд 20:20:52 #75 №2350231 
>>2350036
А какая может быть в теории работа на Хаскеле? Где он используется?
Аноним 04/05/22 Срд 23:14:09 #76 №2350331 
>>2350231
Где и остальные языки с гц. Веб сервисы, компиляторы, там где нужна относительно строгая система типов (про авиацию кто-то писал, хотя хз ибо там гц наверн табу) ...игры (в теории) например. Мне сложно придумать еще примеры т.к. я не знаю что в принципе делают на тех же жабах кроме как веб сервисы
Реальный прод? Не так чтобы нигде, вон на HN был недавно пост с serokell (https://serokell.io/blog/top-software-written-in-haskell) с примерами, в коммах накидали что это далеко не все (хотя на К. компания дропает хаскель (и ерланг, кложу и еще что-то) из-за того что на js/java проще людей найти, найс пример конечно).
Идеально можно на пруверы пойти еще, их можно использовать для каких-нибудь штук где важна безопастность. Но, конечно, никому не нужен стек на который никого не найти...
Аноним 05/05/22 Чтв 00:33:59 #77 №2350401 
>>2350331
> Веб сервисы
Разве они не на PHP пишутся?
> компиляторы
Разве они не на Си пишутся?
> игры (в теории)
Сомнительно. Там же всё на OpenGL связано и движках, то есть только C++ и C#.
> Реальный прод?
Тут только Java.
> Идеально можно на пруверы пойти еще,
Имеется ввиду системы доказательства теорем? Мне кажется, за пределами двух-трёх НИИ это нигде больше не используется.
> их можно использовать для каких-нибудь штук где важна безопастность
Не совсем понял, о чём это. На любом современном языке можно писать безопасный код.
Аноним 05/05/22 Чтв 00:52:29 #78 №2350406 
>>2350401
>Разве они не на PHP пишутся?
Где-то наверн, не только же, их же куча>>2350401
>Разве они не на Си пишутся?
всм? зачем? разве что, чтобы портировать всюду, но зачем портировать какой нибудь perl6 на всякие эзотерические платформы. Хаскель особенно хвалят как инструмент для написания компиляторов из-за фич типо gadt'ов
>Сомнительно. Там же всё на OpenGL связано и движках, то есть только C++ и C#.
Да, сомнительно ибо нет тулзов почти. Но это хайлевельных. Биндинги для OpenGL, Vulcan, SFML, SDL2 есть. ECS есть. Для 2д простых игр хватит, да и написать движок можно. Шарп для игор ни чем не примечателен, разве что тулзами. Насколько на фп удобно игру писать....
>Тут только Java.
Дык я там скинул статью, примеры хаскеля в р.проде. И что значит - только Java - веб сервисы тоже прод, ты сам написал что там и PHP.
>Имеется ввиду системы доказательства теорем? Мне кажется, за пределами двух-трёх НИИ это нигде больше не используется.
Иногда появляются вакансии, на блокчейны например. Там люди свои для этого инструменты пишут, хз насколько они близки к пруверам но в требованиях пруверы указывают. Но да, от РБ это совсем далеко наверное.
>>2350401
>Не совсем понял, о чём это. На любом современном языке можно писать безопасный код.
Но насколько просто? В Асм, Си, С++ писать безопасный код супер сложно из-за прямого использования памяти, UB и т.п. Не современные? В JS тоже сложно, т.к. минимум статических проверок. В расте (safe - borrow checker итп), шарпе (гц) попроще. Но проще - не значит, что нельзя еще проще. В пруверах ты буквально доказываешь корректность функций, на практике многое слишком трудоёмко доказывать - да, но во всяком случае многие классы ошибок можно избежать. В safe агде исключений тупо нет, как и вечных циклов.
Аноним 05/05/22 Чтв 13:14:48 #79 №2350594 
>>2262247
Комонады подходят под это, вроде как.
Аноним 05/05/22 Чтв 13:21:07 #80 №2350597 
>>2350406
> Но да, от РБ это совсем далеко наверное.
Remote в китае в 2019 изобрели как раз для этого.
Аноним 05/05/22 Чтв 14:00:13 #81 №2350625 
>>2350597
ПВТ -> отсрочка, это единственный шанс на выживание
Аноним 05/05/22 Чтв 14:06:38 #82 №2350634 
>>2350594
Store Void A ~ (Void -> A, Void) ~ Void
Аноним 05/05/22 Чтв 22:45:07 #83 №2350975 
>>2350634
Что это значит?
Аноним 05/05/22 Чтв 22:50:54 #84 №2350980 
>>2350634
А, действительно...
Аноним 06/05/22 Птн 16:04:39 #85 №2351311 
>>2350597
Как ни странно, та хаскелевакансия как раз на блокчейн. И я сейчас упорно пытаюсь подготовиться к собесу, потому что он будет с какими-то иностранцами
Аноним 07/05/22 Суб 20:24:41 #86 №2352053 
Есть ли какая-то прога, которая внятно показывает сколько озу было заюзано в определённом промежутке времени, как это делает вижуал студия по дефолту?Пробовал использовать RTS опции, но я слишком туп, чтоб понять их вывод. Я просто пытался отследить сколько памяти тратится в течение работы проги с обычной рекурсией и сколько с хвостовой. Но в -hy у меня весь график занимает ARR_WORDS, хотя откуда ему там быть, если у меня просто n член Фибоначчи считает, а на Integer вообще малая доля там приходится.
Аноним 08/05/22 Вск 00:38:56 #87 №2352185 
Я понимаю, что тред мёртв, но всё же — хаскель может парсить xml без боли?
Аноним 08/05/22 Вск 09:05:32 #88 №2352245 
> Да и к тому же во время исполнения все это в любом случае транслируется в императивный ассемблер для аппаратной платформы
эталонный детектор васи из 8б
Аноним 08/05/22 Вск 20:13:30 #89 №2352900 
>>2352053
Какая у тебя реализация Фибоначчи, раз ты на нем потребление памяти смотришь?
Аноним 17/05/22 Втр 13:06:25 #90 №2357915 
>>2352185
https://wiki.haskell.org/HXT
Аноним 27/05/22 Птн 12:19:16 #91 №2364546 
Аноны, кто-нибудь пробовал установить и запустить у пебя сервер Wire https://wireapp.medium.com/wire-server-code-now-100-open-source-the-journey-continues-88e24164309c ? Бэкенд у него на Хацкеле, пишут что у них лучшая передача голоса/видео в индустрии.
Аноним 07/06/22 Втр 08:10:29 #92 №2373433 
1587207442009.png
А че в смысле?
Аноним 07/06/22 Втр 08:49:56 #93 №2373448 DELETED
>>2373433
Типичная проблема хоббийных сайтов на платном хостинге и домене, со временем копеечку жалко платить ни за что. Надо делать на говнофрихостах, которые обычно живут долго. Ну или каких-то гитхабах и прочих сервисах.
Аноним 09/06/22 Чтв 18:04:48 #94 №2375856 
Вот смотрите: у нас есть list comprehension, который по факту сахар над do-нотацией, которая сама по себе сахар над композицией (>>=). Поскольку (>>=) для List монады определена через map, то любой пустой генератор помножит на ноль все туплы с элементами в list comprehension, что иногда не совсем то, что хотелось бы.

Что если [a] мы будем сначала трансформировать в что-то типа [Maybe a], для которого определим (>>=) как-то так:
(>>=) :: [Maybe a] -> (Maybe a -> [Maybe b]) -> [Maybe b]
[] >>= f = f None
[x] >>= f = f x
(x:xs) >>= f = (f x) ++ (xs >>= f)

Меня не очень интересует как подобное запилить для нативного list comprehension. Мне интересно исключительно как называется подобная хуйня и формализовал ли кто-нибудь алгебру на ее основе.
Аноним 09/06/22 Чтв 18:05:51 #95 №2375857 
>>2375856
> None
Nothing
быстрофикс
Аноним 10/06/22 Птн 20:21:18 #96 №2376709 
>>2375856
ээ чепушила по русски можна ептыбля
Аноним 11/06/22 Суб 02:26:54 #97 №2376937 
>>2375856
По типам лажа полная выходит.
К тому же `m` в типе `>>=` не получится специализировать, чтобы получить `[Maybe a] -> (Maybe a -> [Maybe b]) -> [Maybe b]`
Максимум: `[Maybe a] -> (a -> [Maybe b]) -> [Maybe b]`

Даже если допустить такой тип для `>>=`, то непонятно, каков будет тип `return`, чтобы монадические законы соблюдались.
sage[mailto:sage] Аноним 14/06/22 Втр 04:12:46 #98 №2379191 
>>2376937
Да, ты прав, по типам полная хуйня, если оставаться привязанным к стандартным тайпклассам.
Аноним 17/06/22 Птн 10:19:05 #99 №2381668 
изображение.png
Помогите начинающему хаскелисту
Есть функция, которая должна принять имя файла и при соответствии условию вернуть его тело минус заголовок
Сейчас оно жалуется на то, что у меня входящий тип IO String, и хочет просто строку. Но когда ставлю просто строку, оно хочет IO String. Тип возвращаемого значения вроде как в порядке
Я так понимаю, это особенности чисто функционального программирования? Как фиксить-то?
Аноним 17/06/22 Птн 13:55:59 #100 №2381827 
>>2381668
readFile хочет string на вход, а ты ему даешь IO String
Аноним 17/06/22 Птн 14:53:35 #101 №2381896 DELETED
Здpaвствyйтe, аноны
Сразу прощу прощения за вайп


Нe дyмaл, что пpидётся вот тaк обpaщaться зa помощью к нeзнaкомым людям, но я уже нe знaю, что дeлaть блин

У моeго котикa обнapyжили лeйкоз.
Зовyт Mишa. Михaил Алeксaндpович. Молодой eщё, 2 годикa
Кaк я пpочитaл, это очeнь мepзкaя болeзнь, из-зa котоpой пpи отсyтствии лeчeния Мишa можeт yмepeть. В общeм, нyжно пepeливaниe кpови...
Доноpa я нaшёш, a дeнeг нeмного нe хвaтило.
1300 остaлось нaйти
Умоляю, аноны, помогитe!!

552140ᅠ03758030ᅠ54 (извините, что именно так номер карты написал - боюсь бан выхватить)

Всё нaчaлось с того, что в послeдниe дни Мишa стaл очeнь пaссивeн, постоянно лeжaл, eдy почти нe eл, только пил. Я дyмaл, это пpойдёт... Зaбил тpeвогy только когдa Мишa под сeбя сходил в тyaлeт. Помчaлся с ним в вeт.клиникy, тaм осмотpeли, взяли кpовь нa aнaлизы и чepeз дeнь обнapyжили лeйкоз. Объяснили, что это нe вылeчить, но пpи пpaвильном yходe котикy можно пpодлить жизнь. Я готов к этомy и моpaльно, и мaтepиaльно, я полyчaю стипeндию, работаю, но из-зa того, что нe ожидaл, что Мишa тaк зaболeeт, дeнeг нa обслeдовaния/пpоцeдypы и сaмо пepeливaниe нe хвaтaeт, a стипeндия и зарплата только 25-го. Я зaнялa, сколько смоглa, но всё paвно 1300 нe хвaтaeт.
А доктор сказал, что пepeливaниe нyжно сдeлaть кaк можно быстpee...

Он постоянно лeжит, сaм нe кyшaeт (пpиходится со шпpицa дeтским питaниeм нaсильно), писяeт под сeбя. Нy и похyдeл сильно нa фонe этой этого всeго...

Умоляю, аноны, помогите пожaлyйстa, любой суммой, хоть копейкой блин...
Аноним 17/06/22 Птн 19:40:21 #102 №2382163 
>>2381827
Как я уже писал, если я пытаюсь скормить ему просто строку, он начинает хотеть IO String
Аноним 17/06/22 Птн 20:35:31 #103 №2382200 
>>2382163
Возвращаемое значение в ио оберни,
readFile возвращает значение в ио.
<- просто сахар для >>=, почитай про монады и do.
Чтобы значение в монаду пихнуть юзай pure :: a -> m a
Аноним 17/06/22 Птн 20:47:17 #104 №2382212 
readFile :: String -> IO String
pure :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b

если e :: m a, f :: a -> m b, m - Monad
do
x <- e
f x

эквивалентно
e >>= \x ->
f x

и имеет тип
m b
Аноним 17/06/22 Птн 20:59:18 #105 №2382220 
Ну и вдогонку ещё один вопрос. Надо распарсить заголовок файла, и для этого заполнить структуру. Как это сделать?
Аноним 17/06/22 Птн 21:03:40 #106 №2382223 
>>2382212
Начинающему — это буквально пара задач на кодварсе. Но я решил не мелочиться, и сразу пойти в реальные задачи
Я довольно слабо понял написанное, на самом деле. Ты описываешь pure как фвп, которая применяет монаду к аргументу, >>= как что-то пока малопонятное, а дальше совсем потерялся
Аноним 17/06/22 Птн 21:40:04 #107 №2382256 
>>2382223
Запись вида f :: a -> a понимаешь?
Это значит что функция f может работать с любым типом а.
Есть расширение чтобы писать явно
f :: forall a. a -> a. "для любого а, ф берет а и возвращает а".

pure :: Monad m => a -> m a, здесь m это любой конструктор типа (что-то, что берет тип и возвращает тип (тип типов , a :: , m :: -> ), тип это или конструктор типа -- выводится из контекста)

Monad m => это ограничение, говорит что использовать функцию pure можно только с такими m , которые реализуют интерфейс monad.

pure, как видно по типу, берет значение некого типа А и возвращает значение преобразованного типа M A.
считай просто оборачивает значение внутрь какой-то структуры M.

>>= это оператор с 2мя аргументами, первый - значение преобразованного монадой типа (m a), второй - функция, которая берет значение НЕпреобоазованного типа (а) и возвращает преобразованного (той же монадой) (но опционально другого) типа .
Можно представить что "m a" это вычисление значения типа "а" в каком-то контекстe "m"
тогда "x >>= f" позволяет выполнить операцию над значением в "х" не покидая контекст ("f" тут функция берущая "a", но "х" имеет тип "m a").
пример,
putStrLn :: String >>= IO ()
getLine :: IO String
"getLine >>= putStrLn" (или с лямбдой "getLine>>= \ x -> putStrLn x")
здесь m ~ IO, A ~ String, B ~ ().
у нас было значение строка внутри контекста консоль, мы сделали новое значение (типа (), unit) тоже в контексте консоли, но теперь наше значение несёт в себе ещё операции ввода строки и затем выводаее на консоль.


pure "str" :: IO String
значение строка в контексте консоли, без каких-либо эффектов

у тебя есть свой код, оперирующий строками
пусть он будет в функции f :: String -> String
ты хочешь функцию, которая принимает строку (имя файла), применяет операцию f к прочитанному содержимому файла и возвращает его

какой тип функции?
openFile берет строку, значит "String ->"
возвращает тоже строку, значит в конце "String"
внутри ты читаешь из файла - это возможно только внутри контекста консоли, т.е. монады IO, значит возвращаемая строка будет типа "IO String"

openFile :: String -> IO String
openFile file = ?

замечу, readFile :: String -> IO String,
значит readFile file :: IO String

нужно ещё применить f к прочитаному, т.е. возвращать операцию которая будет сначала читать, а потом поменять f

readFile file >>= f нельзя, так как f возвращает просто строку, а >>= требует чтобы ф возвращало строку в том же контексте, в котором находился первый аргумент

readFile file >>= \ x -> ?
x имеет тип String, f x :: String
нужно это обернуть в контекст, значит используем pure
readFile file >>= \ x -> pure (f x)

это ты мог записать с помощью сахара do так:

do
x <- readFile file
pure (f x)

прим.
если нужно применить операцию над значением внутри контекста, но операция сама по себе контекста не требует, можно юзать fmap или (<$>)
fmap :: (a -> b) -> m a -> m b
с ним тело функции openFile можно записать как
fmap f (readFile file)
или
f <$> readFile file
Аноним 18/06/22 Суб 00:17:17 #108 №2382352 
>>2382256
Пока что я сошёлся с собой во мнении, что лезть в монады буду по мере необходимости. Пришлось часть функционала запихнуть в мейн, но прочитать заголовок я смог. Осталась проблема конвертации byteString в Int. В hoogle ничего похожего, да и в функциях из byteString тоже. Как?
Аноним 18/06/22 Суб 06:38:49 #109 №2382464 
>>2382352
В байтстринге что-то вида текста "12"? Можно в стринг преобразовать сначала.
"read . BS.unpack"
если нужно побайтово смотреть то я хз, погугли binary мб
Аноним 18/06/22 Суб 13:41:03 #110 №2382705 
>>2382464
В байтстринге сырые байты, часть из которых тест и прекрасно интерпретируются, а часть — инты, которые я не могу вытащить
Аноним 30/08/22 Втр 14:15:39 #111 №2450128 
Хаскель умер, как и тред
Аноним 30/08/22 Втр 14:45:06 #112 №2450152 
>>2450128
Что мертво, умереть не может.
Аноним 31/08/22 Срд 01:10:13 #113 №2450604 
>>2171509
Там, где можно, Optional/Maybe вообще лучше избегать. Если функция возвращает строку, возвращай в случае фейла пустую, если список, возвращай пустой список, если инт, то -1 (если негативные значения не используются). Мейби бейби это нечитабельная дрисня.
Аноним 31/08/22 Срд 02:26:26 #114 №2450627 
>>2450604
удачи не проеьаться забыв проверять невалидные / ошибочные значения, лучше уж исключение кидать, если больно обработку кажд раз писать
Аноним 31/08/22 Срд 09:20:39 #115 №2450707 
>>2450627
Это варик не для параноиков, не спорю.
Хотя у Мейбилэнд есть хорошее свойство, что если что-то одно выкинет Nothing, то весь результат будет Nothing, почти как исключение.
Аноним 04/09/22 Вск 00:57:58 #116 №2454456 
>>2450707
Кидать исключения тоже не для параноиков, но и не даёт молча юзать невалидный ответ.
Аноним 04/09/22 Вск 20:29:02 #117 №2455220 
Уважаемые коллеги, графы и деревья уже строить и обходить научились? А читаемый код писать? А буковок то вам побольше отгрузили и разрешили пользоваться, чтобы сущностям давать полноценные название или всё так же однобуквенные. Новой матановской терминологии не подвезли, что такую простую хуетень как монад описать? Ну и как в целом дела-то, всё факториалы считаете?
Аноним 04/09/22 Вск 22:05:53 #118 №2455325 
>>2455220
Даня Крюгер считает, что дорос критиковать ФП, выбрасывая бессвязный текст в тред.
Аноним 10/09/22 Суб 02:43:30 #119 №2459471 
>решил попробовать хаскель
>скачал 40мб инсталлер
>тот насрал в корень диска и отказался работать
>пошел качать в ручную ghc
>тот весит больше чем jdk
это точно продукт не от микрософта?
Аноним 10/09/22 Суб 09:07:52 #120 №2459499 
>>2459471
лол ебать в архиве ghc лежит еще один архив который весит 2.7 гига
Аноним 10/09/22 Суб 09:39:50 #121 №2459502 
>>2459471
>>2459499
>отфильтрован установщиком
Физиономию этого индивидуума вообразили?
Аноним 10/09/22 Суб 10:56:05 #122 №2459529 
>>2459502
Вы будете смеяться, но процесс установки Хачкеля на рач пинус точнее на бомжару меня заставил усомниться, что ФП для умных людей. Стак нормально поставился, но когда я попытался установить расширение на вскод, оказалось, что ему нужен GHCup, что вообще отдельная хуйня, но там внутри свой стак и компилятор. Когда я и его поставил, вскод долго не мог найти его путь, лишь чудом его нашел. Еще он юзал bash вместо моего zsh и с этим тоже были какие то проблемы, и не подтягивал системное прокси (на работе я могу сидеть только через него, иначе без доступа к интернету).
Но вишенкой на торте стало, что при каждой открытой вкладке с кодом на Хаскеле это ебаное расширение проверяет обновления, то ли себя, то ли GHCup, и если у него это не получилось, он отказывается работать. Естественно, прокси он тоже не подтягивал.
Во-первых, по моему это блядь лакмусовая бумажка, что для самого популярного 2к22 редактора расширение для Хаскелля высранное дегенератами ебаное говно. Конечно, все коммьюнити не отвечает на нескольких человек, но блядь, каковы были шансы?
Во-вторых, нахуй тулсет Хачкеля такое запутанное месиво? Видно сразу почерк любителей писать нечитаемые однострочники вместо понятного кода.
Аноним 10/09/22 Суб 23:52:32 #123 №2460071 
>>2459529
Прокси и кастомными шелами не пользуюсь - нечего сказать. А так, ghcup прекрасно ставился и работал и на нескольких линухах и на винде (на винде мб платформа ещё была правда), расширение на вскод тоже сразу работает. Правда только со своим, мелким, проектом (однофайлы не видит, большой проект с инета игнорил), но проблем со связкой установленных ghc/cabal'a не было.
>ему нужен GHCup, что вообще отдельная хуйня, но там внутри свой стак и компилятор
В расширении можно настроить на использование path, вместо автоматич установки/юзания ghcup.
>нечитаемые однострочники
Если ты про названия, то сравни с далёким от хс Си - ещё хуже. Если про попытки вписать функцию в строку - то это не связано с ФП, и, так-то, вездесуще.
Аноним 11/09/22 Вск 00:20:39 #124 №2460085 
Почему хаскелль и ФП не мейнстрим, если функциональное программирование и хаскель в частности, позволяют писать более безопасные и логически завершённые программы? Не набрасываю, просто реально интересно.
Аноним 11/09/22 Вск 00:23:23 #125 №2460087 
>>2460085
Потому что эта хуйня сделанная математиками с математическим сленгом, который хуй проссышь. Научить рандомного человека писать на жабе проще.
Аноним 11/09/22 Вск 02:29:40 #126 №2460107 
>>2459502
то есть это так и было задумано?
просто я хотел погрузиться в мир фп
но пока что лишь вступил в говно
если язык позволяет себе обсираться уже в таких моментах
то чего мне от него ждать дальше
Аноним 11/09/22 Вск 03:07:49 #127 №2460113 
>>2460085
потому что он сложный пиздец
Аноним 11/09/22 Вск 07:35:06 #128 №2460139 
>>2460085
>более безопасные и логически завершённые программы
нахуй никому не нужны, когда можно хуяк-хуяк и в продакшн.
Аноним 11/09/22 Вск 09:23:28 #129 №2460149 
>>2460085
Там где нужна безопасность часто не принимается жирный рантайм/ленивость/GC. А в остальных случаях конкуренцию составляют другие ФП яп аля скалы на жвм, агды с пруфами итп.
Аноним 12/09/22 Пнд 10:44:10 #130 №2460896 
Что такое монады?
Аноним 12/09/22 Пнд 13:47:22 #131 №2461089 
>>2460896
персонаж аниме
Аноним 12/09/22 Пнд 18:23:42 #132 №2461321 
>>2460896
Моноиды в категории эндофункторов.
Аноним 12/09/22 Пнд 20:12:31 #133 №2461406 
>>2460896
Инстанс

class Monad m where
(>>=) :: m a -> ( a -> m b) -> m b
(>>) :: m a -> m b -> m b
return :: a -> m a

Такой что

return a >>= k = k a
m >>= return = m
m >>= (\x -> k x >>= h) = (m >>= k) >>= h
Аноним 13/09/22 Втр 09:14:33 #134 №2461670 
>>2171218 (OP)
Можно ли на хаскеле заниматься NLP и машинным обучением?
Аноним 13/09/22 Втр 19:09:51 #135 №2462064 
>>2461670
в хаскеле только mlp
Аноним 14/09/22 Срд 02:21:05 #136 №2462382 
>>2462064
Можно поподробнее?
Аноним 15/09/22 Чтв 19:27:16 #137 №2463721 
У меня в вузе ФП началось, вот хотел спросить где хаскель вообще на практике применяется кроме как для написания парсеров, пруверов, чекеров
Аноним 15/09/22 Чтв 19:34:26 #138 №2463729 
Есть какие-нибудь изичевые статьи, чтобы понять как работает конпелятор этого вашего хачкеля? Примерно понимаю как работают конпеляторы всякой императивщины, ну там процедурки в ассемблер переводятся, динамическая память теми же процедурками управляется, стеки вызовов есть прочая херь. А как оно тут ваще тёмный лес
Аноним 15/09/22 Чтв 21:34:08 #139 №2463822 
>>2463729
Я вообще случайно твой пост увидел и в тред зашел, поделюсь необоснованным мнением.
У меня есть подозрения, что код на любом языке можно записать в процедурном виде на си, а там уж скомпилировать. Эта вся лямбда хуйня тупо абстракция же. Вангую, на машинном уровне те же процедурки и стеки.
Аноним 16/09/22 Птн 18:56:01 #140 №2464505 
>>2463822
Ну например самые простые кейсы:
1) сколько байт занимает в хаскеле значение типа "число";
2) как будет представлен в памяти тип данных "массив";
3) предыдущий вопрос, только для типа данных "структура" (таких правда в хаскеле нет, есть дата тайпы, но в принципе это же "структура", ведь так?);
4) если хаскеловская функция вернёт функцию замкнутую на свои аргументы, какие структуры будут при этом лежать в памяти (тут имеются ввиду байтики)?
Аноним 16/09/22 Птн 22:14:29 #141 №2464703 
>>2464505
Я вообще за хаскель не шарю, пять лет назад в этот тред заходил ради интереса. Ну вот давай подумаем логически, к примеру
>2) как будет представлен в памяти тип данных "массив"
Допустим, ты знаком с алгоритмами/контейнерами, как бы ты на C/C++ реализовал ленивые вычисления? Ну самый прямой способ, создать динамический массив типа std::vector и пополнять его по мере необходимости, или же unordered_map, чтобы кэшировать значения функции для части аргументов.
Аноним 16/09/22 Птн 23:59:16 #142 №2464769 
>>2464505
1 Int - самый распространенный наверное - слово, но пару бит на тег, есть неограниченные из gmp, есть и 8/16/32/64 бит (и boxed и нет)
2 массивы есть как массивы, но не в стдлибе, в ней основная структура - связный список
3 data по умолчанию хранит thunk'и - ленивые значения, но может и не ленивые; по умолчанию все boxed, есть распакованные типы, но сомневаюсь, что можно несколько таких объединять в полностью распакованную структуру, распакованные кортежи например неюзабельны из-за налагаемых ограничений
Аноним 28/09/22 Срд 20:00:32 #143 №2476778 
>>2171218 (OP)
https://www.patreon.com/csaba_hruska
Аноним 17/10/22 Пнд 20:08:46 #144 №2490764 
Хуя тред умер
Аноним 17/10/22 Пнд 22:21:51 #145 №2490873 
>>2490764
А хули ты хотел 3,5 борщехлеба лениво дергают свои монады это тебе не js обезьянник
Аноним 17/10/22 Пнд 22:22:26 #146 №2490876 
>>2490873
Помоги плез https://2ch.hk/b/res/276005192.html
Аноним 08/11/22 Втр 16:50:07 #147 №2508920 
Че по монадам почитать?
Аноним 09/11/22 Срд 00:33:40 #148 №2509366 
>>2508920
Monad m = Applicative m +
bind :: m a -> (a -> m b) -> m b

всё.
Аноним 09/11/22 Срд 22:06:14 #149 №2510176 
Почему не работает
(Just (:)) <> (Just 3) <> (Just (:)) <*> (Just 5) ?
Аноним 09/11/22 Срд 22:06:33 #150 №2510177 
изображение.png
>>2510176
Аноним 10/11/22 Чтв 03:00:25 #151 №2510346 
>>2510177
У (<*>) ассоциативность левая, у (:) правая.
Аноним 28/11/22 Пнд 22:53:47 #152 №2526027 
Чому тред мертв?
Аноним 29/11/22 Втр 14:47:59 #153 №2526447 
>>2526027
Потому что этот говноязык никому нахуй не нужен.
Аноним 05/12/22 Пнд 06:52:03 #154 №2531171 
>>2526447
На нем пишут же даже
Аноним 16/12/22 Птн 17:03:13 #155 №2543190 
16710616169041.jpg
Друг сагитировал попробовать поизучать эту хтоническую тварину. Сам на винде, начал собирать окружение, итого:
- стандартный менеджер кабал постоянно проебывается с зависимостями, начинаешь откатывать ghc - одно лечится, другое отваливается. А я хочу его использовать по нижеупомянутой причине. Пиздец какой-то
- стак благодаря контейнеризации кое-как их разруливает, но кидать глобальные пакеты в юзерский профиль? Серьезно? А пуллреквест с патчем этого непотребства до сих пор висит открытых, причем автор сдался его поддерживать лул
- Расширений для иде 2,5 штуки, причем одно не поддерживается уже больше года, второму надо снижать версию ghc и для оставшегося надо руками доустанавливать одноименный пакет чтобы отладка работала
- Исходя из пункта выше, актуальных идешек всего две, вим и вскот, само собой как нормис я оба считаю неюзабельным говном, к саблиму как раз тухлый плагин идет
- Отсутствие нормального версионирования дабы разрабы могли свои пакеты подбивать к той или иной лтске
- Как следствие, депхелл ебанутый просто. Еще и распространение в виде исходников, сборка которых висит на одном потоке проца по десять минут, заебись. Как там владельцы ноутов поживают я даже представлять не хочу

Пойду с лицом лягушки кидать симлинк на профиль стака, но это всё булшит полнейший. Вся красота языка зарублена хуевейшей поддержкой, чем-то напоминает ранний раст, который еще какой-то отчаянный на микроконтроллеры натягивал.
Аноним 20/12/22 Втр 15:32:01 #156 №2547296 
Читаю учебник по хаскелю, и там каждая функция написана в стиле
foo bar = yoba bar where yoba = ...
Это нормально, что у меня от такого лицо скрючивается?
Можно ведь по-человечески:
foo bar = let yoba = ... in yoba bar
Или я просто не просветлился в должной степени и из меня лезут мерзкие процедурно-императивные привычки?
Аноним 20/12/22 Втр 15:36:20 #157 №2547299 
>>2543190
>актуальных идешек всего две, вим и вскот
Есть редактор helix (https://github.com/helix-editor/helix) само сабой, написан на расте, это такой вим, который не надо настраивать два месяца. Поддерживает лэнгвидж серверы в принципе и хасельный в частности.
Аноним 20/12/22 Втр 22:19:02 #158 №2547814 
>>2547296
Это кстати вроде относительно недавно (может быть пару лет) стало модно. Сам where синтаксис конечно давно был, но вот разбивать на кучу подвыражений, вские там "= go where", лесенки из нескольких уровней вложенных where - все это относительно недавно стали лепить кмк. Хотя на мой взгляд вроде неплохо.
Аноним 20/12/22 Втр 23:13:15 #159 №2547855 
>>2215509
Нужно осознать что ФП вертит в рантайме синтаксическое дерево, а не выполняет раз-два-три. Вдохновись сначала лиспом/схемой, он проще и понятнее.
Аноним 20/12/22 Втр 23:27:47 #160 №2547865 
>>2460896
Класс типов с определёнными свойствами. Можешь считать что они реализуют некоторый интерфейс.
Аноним 21/12/22 Срд 09:06:07 #161 №2548061 
>>2547814
Просто я привык читать код сверху вниз, а с where приходится наоборот. Наверное удобно, когда имена хорошо подобраны, но это не всегда так.

Еще глаз цепляется, когда паттерн матчинг выносят в сигнатуру функции, такое еще в эликсире встречал. Если у тебя один case ... of, то прошелся взглядом по строкам, сопоставил паттерн и возвращаемое значение и доволен, а с сигнатурами приходится парсить строки в голове.
Аноним 21/12/22 Срд 12:08:10 #162 №2548172 
>>2547855
Удвою.
Пока пытался понять смысл композиции (.), меня осенило, что функции в хаскеле похожи не на последовательность инструкций, а на конвейер, где входные данные пересобираются в выходные. После этого стало гораздо проще изучать язык.

Мимо почти год балуюсь литкодом и читаю книжку Хаттона
Аноним 29/12/22 Чтв 11:59:22 #163 №2557111 
>>2547296
А мне нравится, это математично.
С переменными перед выражением возможна была однопроходная компиляция, но к хаскелю это в принципе неприменимо.
Аноним 02/02/23 Чтв 21:02:18 #164 №2597365 
для хаскеля только vim подходит или есть другие среды разработки где можно открыть большой проект. кто чем пользуется?
Аноним 02/02/23 Чтв 22:59:54 #165 №2597515 
>>2597365
HLS в любом редакторе, поддерживающем LSP работает. На работе половина чуваков в vscode сидит
Аноним 02/02/23 Чтв 23:59:01 #166 №2597581 
>>2597515
А остальные на чём?
Аноним 03/02/23 Птн 11:30:57 #167 №2597803 
>>2597581
Емакс
Аноним 08/03/23 Срд 07:54:33 #168 №2633374 
Что такое ваши эффекты и чем они лучше монад и монад-трансформеров?
Аноним 08/03/23 Срд 23:57:01 #169 №2634305 
>>2171218 (OP)
У этого говна IDE существует вообще? Под мобилку прогу сделать например
Аноним 09/03/23 Чтв 18:02:20 #170 №2634870 
>2к23
>IDE
Аноним 09/03/23 Чтв 23:00:34 #171 №2635109 
167839133731936579.mp4
>>2634870
RAD IDE програмить мышкой, копипаст кода из чатГПТ
Аноним 05/04/23 Срд 18:31:29 #172 №2663535 
>>2548172
Мне после изучения хаскеля показалось, что все программирование это про преобразование одних данных в другие.
Аноним 06/04/23 Чтв 19:09:02 #173 №2664389 
>>2663535
С разморозкой, анон
Аноним 07/04/23 Птн 10:39:02 #174 №2664767 
>>2664389
Это сложно назвать разморозкой - у меня практически первый язык.
Аноним 07/04/23 Птн 11:06:46 #175 №2664773 DELETED
>>2664767
С заморозкой, анон.
Аноним 07/04/23 Птн 12:40:31 #176 №2664865 
>>2215509
Перед изучением хаскеля есть смысл навернуть SICP.
Это вообще пожалуй единственный случай когда есть смысл читать SICP лол.
Аноним 09/04/23 Вск 22:27:55 #177 №2667656 
Какое же дерьмо этот ваш петухаскель, пиздец просто. Только в Java возможно настоящее функциональное программирование. Да и в принципе только Java — язык программирования, всё остальное это пародия на язык.
Аноним 10/04/23 Пнд 02:27:39 #178 №2667756 
>>2667656
Cool story bro
Аноним 16/05/23 Втр 16:26:31 #179 №2700821 
>>2214405
Есть, но она одна
Аноним 18/05/23 Чтв 05:03:36 #180 №2702778 
>>2667656
Джавамуха уже и в хаскель-тред протекла, спешите видеть
Аноним 16/06/23 Птн 18:00:05 #181 №2735437 
изображение.png
Как писать что то такое? То есть нужен кейс по типам
Аноним 16/06/23 Птн 19:29:20 #182 №2735550 
>>2735437
Типы во время компиляции стираются. Если нужно паттерн-матчить по типу, то придется таскать его с собой. Смотри dynamic \ type families \ singletons
Аноним 18/06/23 Вск 15:30:17 #183 №2737305 
Ваш язык говно
Аноним 18/06/23 Вск 18:37:43 #184 №2737517 
image.png
>>2735437
А зачем тебе такое? Может твоя проблема решается как-то по другому? Если нет, то анон выше правильно сказал про dynamic/typeable, но это вообще не хаскель-вей.
Аноним 18/06/23 Вск 18:39:05 #185 №2737519 
>>2737517
Правда кейс сделать не получится - нужно будет кастить к каждому типу и смотреть скастилось или нет.
Аноним 05/07/23 Срд 17:00:03 #186 №2754821 
ИТТ хоть кто-то написал что-нибудь на хаскелл, что можно применять ХОТЯ БЫ для себя?
Аноним 05/07/23 Срд 17:16:58 #187 №2754850 
>>2754821
Да
Аноним 05/07/23 Срд 19:37:57 #188 №2755143 
>>2633374
https://okmij.org/ftp/Computation/having-effect.html
Аноним 09/07/23 Вск 18:26:06 #189 №2759993 
>>2754821
Да, я прод пишу.
Аноним 13/07/23 Чтв 21:37:27 #190 №2765067 
>>2759993
Что именно?
Аноним 14/07/23 Птн 08:42:33 #191 №2765302 
>>2765067
Криптоштуки и немного бэка.
Аноним 15/07/23 Суб 16:19:23 #192 №2767223 
>>2171218 (OP)
Почему тип результата в сигнатуре функции пишется в цепочке аргументов? Разве не логичнее было бы писать отдельно, вроде
f :: a -> b :: c
или
f :: c :: a -> b
вместо
f :: a -> b -> c
?
Аноним 15/07/23 Суб 17:39:24 #193 №2767347 
>>2767223
Каррирование
Аноним 16/07/23 Вск 05:38:32 #194 №2768234 
>>2767223
Потому что то, что ты написал парсер в мозгу хаскелиста распарсит как "функция f из a в b является типом c".
Аноним 16/07/23 Вск 11:04:44 #195 №2768360 
>>2768234
У всех хачкелистов проблемы с построением предложений?
Аноним 16/07/23 Вск 17:36:48 #196 №2768802 
Стикер
>бесточечный стиль
>f = f1 . f2
Аноним 21/07/23 Птн 11:25:33 #197 №2775918 
>>2768802
Ооо, ты вспомнил.
Вот как бы я не любил ООП, ФП это просто горящий мусорный бак вещей, которые не представляют никакой ценности, кроме выебонов, а на практике даже вредны.
В хаскелле я могу не писать аргументы функций, а определять их как композицию функций. Хорошо, могу. Кто-нибудь мне объяснит, нахуя? Нет, это не делает код читаемым, это делает его нечитаемым, потому что вместо того, чтобы посмотреть, какие у функции аргументы, мне придется перейти к определению минимум еще одной функции, если конечно она тоже не пойнт фри.
Да и вообще деление кода на кучу мелких функций это рак ебаный, потому что приходится прыгать по файлу, а то и по файлам при чтении кода, когда можно было бы просто прочитать код в линейной манере, будь он нормально написан. Обфускация кода встроенная на уровне парадигмы. А в Хаскелле это еще и обмазано ленивостью, поэтому удачи в отладке всего этого месива. Тьфу, блядь.
Аноним 21/07/23 Птн 16:06:38 #198 №2776329 
>>2775918
> В хаскелле я могу не писать аргументы функций, а определять их как композицию функций. Хорошо, могу. Кто-нибудь мне объяснит, нахуя?
Это не "нахуя", а просто следствие того чем являются и как определяются функции в хаскеле. Не нравится\не понимаешь\не умеешь такой стиль - запрети линтером, не пропускай такое на код ревью и радуйся своим понятным аргументам a и b. Размер функций язык вообще никак не форсит, так что совет тот же.
Ленивость да, иногда срет в кашу и нужно понимать.
Аноним 21/07/23 Птн 19:27:53 #199 №2776712 
>>2776329
>не пропускай такое на код ревью
А если я не помидор? А если я читаю чей то гитхаб и там такая параша? Проблема то не в том, что на ЯП нельзя в принципе делать иначе, проблема в том, что ЯП позволяет так делать, а в его коммьюнити так делать модно.
Аноним 21/07/23 Птн 20:57:33 #200 №2776814 
>>2776712
В таком случае делаешь всё тоже самое, что и с другими языками - читаешь и не бухтишь.

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

Штука в том, что если в языке что-то можно сделать более чем одним образом - всегда будет кто-то недоволен тем, что кто-то другой выбрал другой способ. Разве что выпиливать вообще возможность это делать, но тогда получится go и будут бухтеть что это сделать вообще нельзя.

Тебе просто не повезло не любить, когда используют композицию, поэтому для тебя всё фп это горящий мусорный бак теперь.
Аноним 21/07/23 Птн 21:47:58 #201 №2776894 
>>2776814
>мне лень оппонировать
Поэтому ты уже два сообщения высрал?
>Тебе просто не повезло не любить
Да уж не свезло, не смогу теперь похлебать борщей, придется зарабатывать.
>поэтому для тебя всё фп это горящий мусорный бак теперь.
Для меня горящий мусорный бак -- это конкретно идиоматическое ФП. На бумаге оно кросивое, но на практике погромистам приходится мириться с фактом, что компьютеры -- это машины Тьюринга, а не лямбда вычислители. А пойнт фри функции -- это только часть общей картины.
Против элементов ФП в других языках я ничего против не имею. Да и против Хачкелля так то тоже, если бы с ним не носились по всему интернету как со змеиным маслом, а просто себе тихо решали 3.5 специализированные задачи в финтехе (или где он там есть) и строчили паперы в НИИ.
Аноним 22/07/23 Суб 02:49:07 #202 №2777098 
>>2776894
> Поэтому ты уже два сообщения высрал?
Ага. Два высера, написанные левой ногой. Ну хоть какой-то движ в мертвом трее.

> Да уж не свезло, не смогу теперь похлебать борщей, придется зарабатывать.
Уже неплохо. Кто-то вон вообще на жаваскрипте зарабатывает.

> Для меня горящий мусорный бак -- это конкретно идиоматическое ФП.
Ну, хуево быть тобой, наверное.

> Против элементов ФП в других языках я ничего против не имею.
Хех, а мне вот вечно хочется композиции нормальной или алгебраических эффектов - а хуй. Или синтаксис сопротивляется изо всех сил или система типов жидко в портки наваливает. В обоих случаях настолько хуево получается, что лучше и не пытаться. Всё фп в итоге начинается и заканчивается на map-filter-reduce.

>Да и против Хачкелля так то тоже, если бы с ним не носились по всему интернету как со змеиным маслом, а просто себе тихо решали 3.5 специализированные задачи в финтехе (или где он там есть) и строчили паперы в НИИ.
И всякие конпеляторы с дслами и кодогенераторами ещё, и перекладывание жсонов и даже хардварь особо ебанутые делают. Папиры в последнее время больше на агде как-то.

А где во всём интернете носятся, кстати? Я как-то не замечал особо. Везде дефолтные жаба\питон\жс и периодически растоебы в очередной раз что-то переписали\предлагают переписать. Гошники раньше тоже бегали, но куда-то все делись
Аноним 22/07/23 Суб 04:01:06 #203 №2777105 
>>2775918
>Вот как бы я не любил ООП, ФП это просто горящий мусорный бак вещей
>Да и вообще деление кода на кучу мелких функций это рак ебаный
>Не знает про букву S в SOLID за который все топят
Аноним 22/07/23 Суб 04:17:55 #204 №2777107 
>>2775918
>Кто-нибудь мне объяснит, нахуя?
Чтобы не придумвывать названия переменным.
>Нет, это не делает код читаемым, это делает его нечитаемым
Все хорошо в меру, никто не заходит специально на https://pointfree.io/
вбивая туда весь свой код. Как правило если функции не унарные, то пойнтфри уже не будет использоваться потому что код действительно превращается в нечитаемую парашу.
>Да и вообще деление кода на кучу мелких функций это рак ебаный
Делю функции на части, которые собираюсь где-то переиспользовать например в тех же тестах. Не писать же мне это ещё раз. Деление на мелкие функции должно происходить так, чтобы по названию функции было понятно, что она делает, это никак не мешает читать код в линейной манере, если тебе конечно не нужны все детали кода разом. Вообще какая-то непонятная претензия - это точно такая же абстракция как во всех других языках.
Аноним 22/07/23 Суб 05:50:24 #205 №2777122 
>>2776894
Надо иметь отрицательный айсикью, что порваться от каррирования и композиций. Ты просто неосилятор. Смирись.
Аноним 23/07/23 Вск 03:46:07 #206 №2778218 
>>2775918
Не, я наоборот уроки по хаскелю прохожу ради изучения фп.
Я и с императивными языками стараюсь дробить функции, да еще и по разным файлам, чтобы избежать повторов кода и уменьшить количество аргументов: такие функции наоборот легче читать, тестировать и менять, чем ебучие простыни, благодаря точному имени, маленькой сигнатуре и чистоте, делающей результат зависящим только от скормленных аргументов. Одну большую функцию еще можно как-то читать, пока в ней нет ветвлений, но с ними получается каша, когда ты просто пролистываешь половину кода функции, смотришь в циклы, возвращаешься на 100 строк обратно и тд, с мелкими же функциями ты просто смотришь на дерево не вдаваясь в детали.
Кстати, с фп особо отлаживать не приходится: я не знаю как так происходит, но ты просто пишешь код и он работает но писать сложнее
Но к хаскелю, кроме как изучения фп, я не притронусь - в рот его ебал.

>>2768802 хуй
Аноним 23/07/23 Вск 10:58:37 #207 №2778323 
Почему curry принимает tuple только с двумя элементами? А если у меня некарированная функция, которой нужно больше аргументов?
Аноним 25/07/23 Втр 00:51:36 #208 №2780345 
>>2778218
>я не знаю как так происходит, но ты просто пишешь код и он работает
За это как раз таки отвечает ебанутая система типов. Большинство видов некорректного кода отсеивается на этапе компиляции. Не представляю сейчас как люди в других языках обходятся без этого.
>но писать сложнее
Придёт с опытом.
>>2778323
https://hackage.haskell.org/package/tuple-0.3.0.2/docs/Data-Tuple-Curry.html#t:Curry
Аноним 14/08/23 Пнд 12:01:56 #209 №2805623 
Вопрос не по хаскеллю:
Чем отличается обращение к глобальной "переменной" внутри функции от передачи контейнера, где лежит эта переменная и еще n ей подобных, в качестве аргумента этой функции?
Результат зависит от значения контейнера, так что вроде referential transparency есть, но в то же время извне не видно, к какой части контейнера функция будет обращаться.
Аноним 15/08/23 Втр 06:23:32 #210 №2806742 
>>2805623
Что?
Пиши пример.
Аноним 15/08/23 Втр 07:26:58 #211 №2806750 
>>2806742
c = 11
d = 2

f1(a, b) {
return d (a + b - c)
}
x = f1(1, 11) ; 2


Против

s = { c = 11, d = 2 }

f2(a, b, g) {
return g.d
(a + b - g.c)
}
x = f2(1, 11, s) ; 2
Аноним 15/08/23 Втр 17:14:20 #212 №2807290 
>>2806750
И что, собственно, тебя волнует? Ссылочная прозрачность? Ну так это следствие чистоты функций. Оттуда и следует ленивость. Компилятор чистого языка всё видит. В хаскелле, например, оба примера будут исполнятся одинаково лениво, если только ты не укажешь строгость членов в объявлении структа.
Аноним 15/08/23 Втр 17:57:13 #213 №2807380 
>>2807290
То, что функциональщиками подается использование глобальных переменных как что-то плохое, в то время как эти же переменные можно использовать просто поместив в один контейнер и передав в качестве аргумента. Есть прозрачность на контейнер, но не обращение к его содержимому. Компилятор при желании и обращение к глобальным переменным увидит.
Аноним 15/08/23 Втр 18:45:29 #214 №2807457 
>>2807380
В функциональных языках нету глобальных переменных. Ты не понимаешь что такое ссылочная прозрачность. У тебя в голове каша. Иди учи матчасть.
Аноним 15/08/23 Втр 19:45:38 #215 №2807519 
>>2807457
Я за этим и пришел.
Аноним 15/08/23 Втр 22:46:25 #216 №2807608 
2023-08-15224442.png
Как такое работает? Поломал себе мосх.
Аноним 15/08/23 Втр 23:37:48 #217 №2807631 
>>2807608
В монаде списка

do
x <- [1..n]
y <- [x..n]

Это тоже самое, что [ ... | x <- [1..n], y <- [x..n]]. Т.е. перебор всех y в диапазоне [x..n] для каждого x в диапазоне [1..n]. Что-то типо вложенных циклов.
Далее return в монаде списка просто создаёт список из одного элемента. Т.е. для каждой указанной выше комбинации, ты создаёшь одноэлементный список и применяешь к нему функцию guarded, которая если условия не выполняется превращает список в пустой список. Ну и в конце все результаты просто конкатинируются.
Аноним 16/08/23 Срд 12:13:36 #218 №2807852 
2023-08-16120914.png
>>2807631
А, ну да, concat
Есть же instance, там написано...
С хаскелем дня не проходит без такого момента ВТФ из гоин он
Аноним 16/08/23 Срд 13:43:16 #219 №2807954 
>>2807852
guard кстати библиотечная функция. Можно переписать на

x <- [1..n]
y <- [x..n]
guard $ x * y == n
return (x, y)
Аноним 18/08/23 Птн 17:24:29 #220 №2810922 
есть такой код
import Data.List.Split

readDouble = read :: (String -> Double)
parseMtx :: String -> [[Double]]
parseMtx s = map ((map readDouble) . words) $ endBy ";" s

можно ли сделать что-то по типу такого?:
readDouble :: Fractional a => String -> a
readDouble = read
parseMtx :: Fractional a => String -> [[a]]
parseMtx s = map ((map readDouble) . words) $ endBy ";" s
Аноним 20/08/23 Вск 15:39:13 #221 №2812933 
>>2810922
Да, только придется добавить read в констрейнты, потому что произвольный fractional не обязан иметь инстанса read, в отличии от дабла у которого компилятор спокойно находит этот инстанс.
Аноним 20/08/23 Вск 15:40:24 #222 №2812934 
>>2812933
Read*
Аноним 20/08/23 Вск 20:02:32 #223 №2813166 
>>2812933
Спасибо, заработало!
Аноним 20/08/23 Вск 20:31:05 #224 №2813191 
>>2813166
Хотя проблема еще осталась.
У меня есть функции
s :: (Read a, Fractional a) -> String -> [[a]]
и
m :: MArray arr cs e => Image arr cs e -> [[Pixel cs e]] -> Image VU cs e,
которую я вызываю как m _ $ s _ (пиксел является Fractional)
и для Pixel Read я не понимаю как указать, а когда в s было просто Fractional, а вместо рида был свой парсер даблов все работало
Аноним 20/08/23 Вск 21:53:39 #225 №2813270 
>>2813191
Можешь показать код полностью или хотя бы прилепить выхлоп компилятора? Скорее всего опять не хватает каких-то констрейтов.
Аноним 20/08/23 Вск 21:56:10 #226 №2813272 
>>2813191
>>2813270
Ты имеешь в виду, что в сигнатуре нет типопеременной, на которую тебе нужно поставить Read?
Аноним 20/08/23 Вск 22:00:50 #227 №2813273 
>>2813191
>>2813270
>>2813272
Или тебе просто нужен Read (Pixel cs e) => ?
Аноним 12/09/23 Втр 21:36:04 #228 №2839091 
class DisjunctionType a
instance DisjunctionType A
instance DisjunctionType B
g :: DisjunctionType t => (A, B) -> t
g (a, _) = a

почему этот код не компилиться? сообщение какое то невнятное

Couldn't match expected type ‘t’ with actual type ‘A’
‘t’ is a rigid type variable bound by
the type signature for:
g :: forall t. DisjunctionType t => (A, B) -> t
Аноним 21/09/23 Чтв 17:59:02 #229 №2850562 
Давайте объединим итт тред с раст-тредом? Будет один живой тред вместо мёртвых двух.
Аноним 23/09/23 Суб 05:10:56 #230 №2852080 
>>2839091
У тебя сигнатура обещает, что функция полиморфная, а реализация на самом деле работает с конкретными типами. Поэтому типы не сходятся.
Аноним 27/09/23 Срд 22:43:10 #231 №2858128 
>>2171509
А ты используй Result<_,_>. Option только для проверки на пустое значение. И делай Result.bind и Result.map.
Аноним 29/09/23 Птн 12:12:30 #232 №2859587 
>>2450627
Нахуй писать обработку кода, если есть монады, где уже все написано?
Аноним 30/09/23 Суб 22:37:06 #233 №2861602 
>>2805623
А причем тут собственно хаскель и фп?
Так же само можно спросить, чем отличается обращение из функции к глобальной переменной или к своему аргументу- некоему объекту через его публичный интерфейс. Дохуя чем.
Аноним 30/09/23 Суб 22:46:47 #234 №2861607 
>>2859587
Чел, так Optional/Maybe - это и есть монады... Пиздец тут дегенераты сидят.

//мимо
Аноним 02/12/23 Суб 14:30:23 #235 №2946483 
>>2807457
Да, я прод пишу.
comments powered by Disqus

Отзывы и предложения