Евгений
Насколько я понимаю есть среди higher category теоретиков движение "equality is considered harmful", но ни одной синтетической теории, в которой бы за основу вместо equality брался equivalence я не знаю
Евгений
Даже в HoTT есть равенство
кана
Folks, есть вопрос. Изучаю хаскель уже пару лет, знаком с лямбда-исчислением, поверхностно с теоркатом (только вчера доперло до меня, как работают ко- и про- функторы), есть пару проектов на кложе в проде, Elm юзал для пета, нет ни проекта на js бещ рамды и так далее. Но вот сам по себе хаскель в проде никогда не использовал. И даже в петах, ничего такого, что можно было бы хотя бы на гитхаб выложить. Хочу написать что-нибудь на нем, не сильно крупное, но законченное и полезное. Какой-нибудь системный демон, тулзу, но нет никаких идей. Может кто помочь с идеями?
igo
о, kava, приветик. читаю твой паблик вконтакте.
кана
Воу, привет
кана
Известность
Зигохистоморфный
шо за паблик?
igo
https://vk.com/home_kana
кана
Там в последнее время мало про фп, потому что комп сдох, а на работе я в основном с фронтом и реактом
кана
Для небольших компонентов/виджетов elm просто охуенен. Писать на нем целое большое приложение может быть больно
Leonid 🦇
прежде чем на хаскеле писать надо ТК подтянуть конечно. без зигохистоморфного препроморфизма никак
Влод
прежде чем на хаскеле писать надо ТК подтянуть конечно. без зигохистоморфного препроморфизма никак
Не согласен. Ну то есть в чатиках писать будут проблемы, засмеют мб, а на хаскеле вроде и так норм писать
Влод
Ну вроде это вполне распространенное мнение
Arseniy
Это же троллинг был, нет?:/
Влод
ну да наверное
Влод
сам думал, что переспросить надо
Влод
блин теперь удалить сообщения хочется, но считаю это читерством
кана
Попытался сделать функтор для типа * -> * -> *, где мапить нужно первый аргумент и понял, что я н самом деле ничего не знал про то, как работают тайпклассы и инстансы
кана
Oleg
Оо, что за тема для синтаксиса?:)
кана
Да дефолтная в vscode
Vasiliy
это же Const, а фмап по первому аргументу - Data.Bifunctor.first
кана
Да, знаю, Box тут для примера, про bifunctor знаю, мысль была сделать именно обычный функтор, где мапить нужно и можно только первый аргумент
кана
Вообще на эту тему (тайп-левел лямды) тут хорошо рассказано - https://vk.com/doc121800070_448130477?hash=01f0b3b8e54ce8942a&dl=e99d741de34012c45f
Artyom
а почему это до сих пор не в GHC? пейпер же из 2015
Dmitrii
В секции 7 написано, что там есть проблемы в совместимости с другими расширениями. А именно, MultiParamTypeClasses и PolyKinds.
Artyom
ну с поликайндами вроде просто implementation problems наверно, ребятам было лень думать, как игнорить эти kind arguments а с MPTC не знаю, наверно для экспериментального расширения прокатила бы какая-нибудь кривулька вроде ограничения на время поиска инстанса или даже “больше четырёх параметров в лямбде нельзя”
кана
Можно ли автоматически вывести инстанс из другого инстанса? Типа instance Monad m => Functor (m a) where fmap f m = m >>= return . f
кана
То есть для все монады автоматически сделать и функторами, потому что монада вроде как не требует быть фурктором сама, на при этом железно таковой является
кана
А, нет, таки требует через аппликатив, но для примера сойдет
Зигохистоморфный
Есть же liftM и ap останется только монаду вывести
Nikita
привет всем :)
Nikita
мы недано выпустили поисковик
Nikita
https://learn-anything.xyz/programming/programming-languages/haskell
Nikita
интересно услышать мне про haskell карту
Дима
Дима
👌
Nikita
:D
кана
Есть же liftM и ap останется только монаду вывести
Не, суть в том, что можно ли установить такую связь между тайпклассами, что если реализуешь один, то автоматически реализуешь и другой через первый.
Зигохистоморфный
Может это уже что-то с зав типами связано
Влод
Там получится ситуация как в плюсах со специализацией. Есть общая имплементация и множество частных
Влод
Ну у меня была идея сделать DebugShow, который был бы обычным Show + ещё красивым, для некоторых частных случаев
Влод
Хотя до сих пор есть подозрение что это реально
Зигохистоморфный
https://www.stackage.org/haddock/lts-8.23/base-4.9.1.0/Debug-Trace.html
Vasiliy
Не, суть в том, что можно ли установить такую связь между тайпклассами, что если реализуешь один, то автоматически реализуешь и другой через первый.
Foldable и Traversable друг через друга выражаются, но там, вроде, просто в документации сказано, мол, реализуйте одно из двух, а то будет казус в виде _|_
Vasiliy
статической проверки нет
Vasiliy
ну да, делаем инстанс Traversable, а в инстансе Foldable используем foldMapDefault
Vasiliy
только, почему-то, я был уверен, что Foldable с Functor автоматически порождает Traversable, а это, похоже, не так
Vasiliy
а в Idris, кстати, можно в рамках одного mutual блока определять инстансы, соответственно, можно написать инстанс Monad и использовать его в определении fmap
Artyom
а какой есть пример foldable+functor, но не traversable? сходу не вспоминается
Vasiliy
дык, вроде, нет таких
Artyom
тогда хочется разобраться, почему foldable+functor не порождает traversable
Vasiliy
гм...
Vasiliy
Traversable должен уметь воспроизводить свою структуру внутри аппликатива
Vasiliy
Functor её сохраняет, а Foldable разрушает, так что используя только их написать traverse не получится
Vasiliy
это так, сумбурные мысли вслух
Artyom
ну вот например Natural -> a можно сделать Foldable и Functor легко, но в Traversable мы в куче случаев не сможем выдать никакого результата (например, если будем мапать a -> Maybe b) я не уверен, правда, что это считается контрпримером
Artyom
о, нагуглился контрпример data Store r a = Store (r -> a) r
Зигохистоморфный
это с линз?
Artyom
не, это просто из какого-то поста
Зигохистоморфный
ну это из комонад
Зигохистоморфный
https://www.stackage.org/haddock/lts-8.23/comonad-5.0.1/Control-Comonad-Store.html
Anonymous
*очередной нуб врывается в тред* Обозначу проблему. При множестве открытых статей, порог вхождения все равно так высок, что я не до конца понимаю основную область применения ЯП. А википедии так же абстрактны, как и сам язык. По этому хочу узнать суть из первых уст. 1. Какова основная область применения языка? 2. Эффективно ли использовать его в качестве основного? 3. Есть ли у haskell неоспоримые и "прощупываемые" сильные стороны? 4. Как именно вы используете haskell на практике? Не кидайте камнями, я пытаюсь понять целесообразно ли вскрывать такую крупную область знаний, стоит ли того. Съедено много хабропостов и статей, первые главы популярных изданий, на всякий случай даже пробежался по исходникам в гите. Мне эстетически приятен функциональный стиль, в том же js и python, там это удобные инструменты в придачу к императивщине и ООП. Но если в питоне с первых уроков можно в файлы писать, то тут не ясно и сколько пробелов и где принято ставить, молчу уж про то, что самая яркая практика пока что - работа с треугольником.
Arseniy
Порог вхождения такой же, как в любой язык. Сравнимо с тем, как только начинаешь программировать в приципе. Просто проблема в том, что надо начать по другому думать несколько. Тогда будет как по маслу. Я когда начал фп, я изучал окамль и голову думал свихну. В какой-то прекрасный момент стало легче, чем любой другой яп. А применение... Хе-хе Думаю, @lightgreen ответит
Anonymous
Да, при наличии мотивации голову повернуть можно под нужный градус. Вот только куда эти ваши монады эффективно сунуть :) за мотивацией в общем-то и пришёл.
Artyom
> 1. Какова основная область применения языка? бекенд вебдев какой-нибудь; компиляторы; блокчейна немало начинает писаться на хаскеле; банки разные используют хаскель; ну и вообще много чего. Нет основной области. (Сразу скажу: игры на хаскеле мало пишут, мобильные приложения мало разрабатывают, machine learning-ом вроде особо не занимаются, десктопных приложений тоже мало.) > 2. Эффективно ли использовать его в качестве основного? зависит от того, чем ты хочешь в жизни заниматься. Для бекендов, наверно, эффективно. Хз. Я сам не знаю. Мне нравится писать десктопные приложения, где safety не особо важна; для них, наверно, не особо эффективно, но учить другой язык лень. Для фронтенда есть Purescript, он похож на хаскель, но насколько там эффективно по сравнению с JS – без понятия. Думаю, что чем больше ты хочешь надёжности от своей программы, тем эффективнее будет. > 3. Есть ли у haskell неоспоримые и "прощупываемые" сильные стороны? парсеры писать легко. Код рефакторить очень легко. Проще, чем в других языках, рассуждать о том, что делает код (особенно с системой типов, которая не ущербная, и с всякими плюшками типа ADTs). Зелёные потоки есть (ну ок, это не только в хаскеле). https://github.com/Gabriel439/post-rfc/blob/master/sotu.md – вот здесь можно почитать, для чего хаскель хорошо подходит наконец, это фича скорее комьюнити, а не языка, но вокруг хаскеля есть много людей, которым интересна теория типов и теория категорий, так что если тебе тоже интересны эти вещи, то, наверно, тебе хаскель и околохаскельный ресёрч понравится > 4. Как именно вы используете haskell на практике? я вон в серокеле¹ пишу криптовалюту² (опенсорсную, можешь потыкать в код). Ещё там сайтики какие-то по мелочи для себя. (Криптовалюту пусть @jagajaga пиарит, я уже спать хочу.) ¹ serokell.io ² https://github.com/input-output-hk/cardano-sl/ > Не кидайте камнями, я пытаюсь понять целесообразно ли вскрывать такую крупную область знаний, стоит ли того. ну некоторые говорят, что им хаскель помогает, даже если они его не используют – меняет образ мышления и всё такое. Я у себя такого не заметил, но, может, я просто невнимательный. А так можно попробовать месяц поизучать хаскель и посмотреть, понравится или нет. > Но если в питоне с первых уроков можно в файлы писать можешь в личку написать и я тебе расскажу, как в хаскеле в файлы писать и даже гуи сделать спойлер: writeFile "file.txt" "this string goes to the file" 🙂 > то тут не ясно и сколько пробелов и где принято ставить установи hindent и он решит вопрос с пробелами за тебя без hindent, к сожалению, никто из новичков почему-то не ставит пробелы нормально 😕 но, с другой стороны, это не очень-то и важно, если подумать > молчу уж про то, что самая яркая практика пока что - работа с треугольником. что за треугольник?
Artyom
> Вот только куда эти ваши монады эффективно сунуть :) ну я хаскель не за монады люблю, а за то, что там логично сделаны простые и базовые вещи — функции можно передавать как аргументы — удобный overloading через тайпклассы — типы есть — ADTs есть — нормальный полиморфизм, а не “чтобы сделать <простую вещь>, юзайте <страшные генерики>” — и так далее
Anonymous
Большое спасибо, так стало по лучше. Код - небольшое хобби, не основная деятельность. Haskell давно на горизонте маячит, но недавно его так и порекомеедовали, мол "для здоровья полезно изредка засесть". Так что поучу, может действительно пригодится где.
Anonymous
Друзья сколько у вас весил самый большой бинарник с программой на haskell?
Artyom
оригинал: 87 MB после strip: 58 MB после upx -9: 12 MB
вот этот самый большой у меня
Anonymous
вот этот самый большой у меня
А какие нужно флаги указать, чтобы максимально статический бинарник похудел?
Artyom
флаги не знаю вряд ли флаги что-то сильно поменяют, основной профит от strip+upx но если кто-то знает какие-то флаги, мне тоже интересно
Artyom
а, инлайнинг можно отключить, наверно но тогда медленнее будет, возможно намного
Anonymous
Это что-то наподобие этого? strip -p --strip-unneeded --remove-section=.comment -o hello-small hello
Aleksei (astynax)
Не надо отключать инлайнинг! Это вам не хелловорлд на сишечке! Сэкономите полкопейки (и то не факт), но сильно испортите производительность
Aleksei (astynax)
strip+upx - нормальный вариант. Только зачем? Для embedded, где мало флэша, upx вреден, т.к. там мало и рама
Dmitry
кто нибудь умеет в postgresql-simple array-и биндить?