@haskellru

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

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

Евгений
16.07.2017
16:45:35
> Только 1 из морфизмов А -> A Как будто их там бесчётное множество :) Если не всякие _|_, он там был бы один.
????????? В большинстве "рабочих" категорий над большинством объектов бесконечно много эндострелок

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

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

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

есть возможность различать их?

гм, впрочем, и (<> mempty) = id, и (mempty <>) = id

Евгений
16.07.2017
17:31:49
не, то, что морфизмов A->A может быть сколько угодно - это понятно, но как может быть много id?
Много id (в Cat1) не может быть, конечно: пусть есть id1 и id2, тогда: id1 * id2 = id2 * id1 = id1, т.к id1 является id, но при этом id2 *id1 = id1*id2 = id2, т.к id2 является id. Значит id1 = id2

Насколько я понимаю есть среди higher category теоретиков движение "equality is considered harmful", но ни одной синтетической теории, в которой бы за основу вместо equality брался equivalence я не знаю

Даже в HoTT есть равенство

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

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

kana
16.07.2017
20:50:39
Воу, привет

Известность

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

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

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

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

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

? animufag ?
16.07.2017
23:05:17
прежде чем на хаскеле писать надо ТК подтянуть конечно. без зигохистоморфного препроморфизма никак
Не согласен. Ну то есть в чатиках писать будут проблемы, засмеют мб, а на хаскеле вроде и так норм писать

Ну вроде это вполне распространенное мнение

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

? animufag ?
16.07.2017
23:21:59
ну да наверное

сам думал, что переспросить надо

блин теперь удалить сообщения хочется, но считаю это читерством

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



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

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

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

kana
18.07.2017
14:13:43
Да, знаю, Box тут для примера, про bifunctor знаю, мысль была сделать именно обычный функтор, где мапить нужно и можно только первый аргумент

Вообще на эту тему (тайп-левел лямды) тут хорошо рассказано - https://vk.com/doc121800070_448130477?hash=01f0b3b8e54ce8942a&dl=e99d741de34012c45f

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

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

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

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

То есть для все монады автоматически сделать и функторами, потому что монада вроде как не требует быть фурктором сама, на при этом железно таковой является

А, нет, таки требует через аппликатив, но для примера сойдет

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

Nikita
18.07.2017
18:09:53
привет всем :)

мы недано выпустили поисковик

https://learn-anything.xyz/programming/programming-languages/haskell

интересно услышать мне про haskell карту

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


?

Nikita
18.07.2017
18:12:57
:D

kana
18.07.2017
18:21:29
Есть же liftM и ap останется только монаду вывести
Не, суть в том, что можно ли установить такую связь между тайпклассами, что если реализуешь один, то автоматически реализуешь и другой через первый.

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

? animufag ?
18.07.2017
18:45:15
Там получится ситуация как в плюсах со специализацией. Есть общая имплементация и множество частных

Ну у меня была идея сделать DebugShow, который был бы обычным Show + ещё красивым, для некоторых частных случаев

Хотя до сих пор есть подозрение что это реально

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

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

Admin
ERROR: S client not available

Vasiliy
18.07.2017
19:18:16
ну да, делаем инстанс Traversable, а в инстансе Foldable используем foldMapDefault

только, почему-то, я был уверен, что Foldable с Functor автоматически порождает Traversable, а это, похоже, не так

а в Idris, кстати, можно в рамках одного mutual блока определять инстансы, соответственно, можно написать инстанс Monad и использовать его в определении fmap

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

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

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

Vasiliy
18.07.2017
19:35:00
гм...

Traversable должен уметь воспроизводить свою структуру внутри аппликатива

Functor её сохраняет, а Foldable разрушает, так что используя только их написать traverse не получится

это так, сумбурные мысли вслух

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

о, нагуглился контрпример data Store r a = Store (r -> a) r

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

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

Denis
18.07.2017
19:57:11
ну это из комонад

https://www.stackage.org/haddock/lts-8.23/comonad-5.0.1/Control-Comonad-Store.html

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

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

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

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

> Вот только куда эти ваши монады эффективно сунуть :) ну я хаскель не за монады люблю, а за то, что там логично сделаны простые и базовые вещи — функции можно передавать как аргументы — удобный overloading через тайпклассы — типы есть — ADTs есть — нормальный полиморфизм, а не “чтобы сделать <простую вещь>, юзайте <страшные генерики>” — и так далее

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

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

Artyom
19.07.2017
00:59:06
оригинал: 87 MB после strip: 58 MB после upx -9: 12 MB
вот этот самый большой у меня

Aleksey
19.07.2017
01:22:10
вот этот самый большой у меня
А какие нужно флаги указать, чтобы максимально статический бинарник похудел?

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

а, инлайнинг можно отключить, наверно но тогда медленнее будет, возможно намного

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

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

Страница 325 из 1551