Egor
не понимал что они такое
Egor
Arr2 - конструктор, который принимает функцию от двух аргументов. То есть сам Arr2 - функция от одного аргумента, где первый аргумент - функция от двух.
Чтобы смапать функцию внутри Arr2, нам для начала нужно эту функцию оттуда достать, сделать это можно через паттерн-метчинг или через селекторы/ключи рекорда:
fmap f (Arr2 g) = Arr2 (\a b -> f (g a b))
fmap f g = Arr2 (\a b -> f (getArr2 g a b))
После того, как мы достали функцию от двух аргументов, которая возвращает a, нам нужно сделать новую функцию на основе этой, которая возвращает b. То есть мы создаем новую функцию от двух аргументов, передаем эти два аргумента в старую функцию, получаем значение типа a, которые мы отдаем в мапающую функцию, которая нам отдает b.
Ну и осталось обратно запихнуть новую функцию в Arr2, сделать это можно через конструктор-фунцию
Arr2 (\a b -> f (g a b))
или рекордную запись
Arr2 { getArr2 = (\a b -> f (getArr2 g a b)) }
спасибо)
Слава
Arr2 - конструктор, который принимает функцию от двух аргументов. То есть сам Arr2 - функция от одного аргумента, где первый аргумент - функция от двух.
Чтобы смапать функцию внутри Arr2, нам для начала нужно эту функцию оттуда достать, сделать это можно через паттерн-метчинг или через селекторы/ключи рекорда:
fmap f (Arr2 g) = Arr2 (\a b -> f (g a b))
fmap f g = Arr2 (\a b -> f (getArr2 g a b))
После того, как мы достали функцию от двух аргументов, которая возвращает a, нам нужно сделать новую функцию на основе этой, которая возвращает b. То есть мы создаем новую функцию от двух аргументов, передаем эти два аргумента в старую функцию, получаем значение типа a, которые мы отдаем в мапающую функцию, которая нам отдает b.
Ну и осталось обратно запихнуть новую функцию в Arr2, сделать это можно через конструктор-фунцию
Arr2 (\a b -> f (g a b))
или рекордную запись
Arr2 { getArr2 = (\a b -> f (getArr2 g a b)) }
То есть, это маппер из одного типа в другой. И не более.
Alexander
как наиболее халявно и без синглетонов AscList зопилить
Зигохистоморфный
Alexander
через мамой клянусь?
Denis
Alexander
у меня тут и так линейные типы, ещё и тайплевел тащить
Aliester
тайплевел это какой-то грязный хак?
Denis
а AscList это ascended list при вставке или я не так понял?
Alexander
+1 за haskell_learn
Зигохистоморфный
Alexander
@catamorphism да просто тип, в котором элементы упорядочены
Alexander
Зигохистоморфный
Alexander
а какой ты от них хочешь профит?
Alexander
можно выразить требование линейности на типах
Alexander
пока ж никакой магии лишней нету
Alexander
типа off-heap хранения и т.п.
кана
тоже +1 за haskell_learn
Denis
Зигохистоморфный
что за haskell_learn?
Denis
ну это мультисет обычно называется
Зигохистоморфный
Denis
https://hackage.haskell.org/package/multiset
Egor
дошел до 9 главы io haskell_learn, до сих пор сдвинуться дальше не могу из-за нехватки времени ;(
Alexander
хочу таки запилить сортировку, проверка того что все элементы на месте нахаляву есть
Alexander
а что сортированы нету
Denis
ну я сам пакет не юзал, просто это то, что ты хочешь
Denis
А какое отношение линейные типы к мультисету имеют тут?
Denis
может я вопрос не понял
Alexander
никакого, я играюсь с линейными типами и делаю (сделал) сортировку
Alexander
мне было интересно как добавить то, что они ещё и сортированы
Alexander
в идрисе кстати я даже такого не осилил с их UniqueTypes там это ад
Слава
Есть такой язык, пересекающийся с ada, называется ada spark. В нем можно сделать контейнер, который будет хранить элементы и давать гарантию, что элементы упорядочены. Но, для этого потребуется повесить постусловия на все методы работы с контейнером - вставка, удаление, и написать доказательство для верификатора. Как это сделать на типах - не представляю.
Евгений
В хаскель завезли линейные типы? :О
Denis
Denis
но лучше мультисет, ей богу
Alexander
я не уверен что я нахаляву получу линейный мультисет
Зигохистоморфный
Alexander
точнее я так понимаю он вообще не может быть линейным просто ну никак
Denis
ни про что линейное я подсказать не могу, я в них не умею
Alexander
выложи гист
завтра, мне немного unsafe убрать надо
Евгений
Alexander
можно
Alexander
не знаю много ли с этого толку прям щас
Denis
Наверное можно, но зачем?
кана
https://t.me/haskell_learn
кана
Чтобы конфа использовалась, нужно активно туда людей редиректить по вопросам и добавишь в шапку
Евгений
Чо-то я не могу в ghc 8.2.2 найти доку по линейным типам
Евгений
https://downloads.haskell.org/~ghc/8.2.2/docs/html/users_guide/index.html
Alexander
а в 8.2.2 и нету
Евгений
Вы на мастере сидите?
Alexander
на своей ветке
Евгений
Какой-то раст-мир прям :) а вы черри-пикаете из мастера или еак это работает
Vladislav
Ок, вопрос от новичка - как начать получать деньги за кодинг на хаскеле? Желательно на удалёнке. Какой минимум знаний нужен для такой работы, и что следует прочитать и прорешать?
К примеру, для работы на java достаточно прочитать Эккеля, узнать, зачем нужен Spring (загадка великая, до сих пор никто не ответил), чуть-чуть знать так называемые прости господи паттерны проектирования и уметь делать простые запросы на sql, для чего достаточно упражнений на sql-ex. И ещё уметь пользоваться maven'ом (чего там уметь-то).
Итак, что нужно для Хаскеля? И где под него ищется работа?
Нужно знать рекурсию, rm -rf ~/.cabal, и две теории категорий (одна запасная)
Vladislav
Всё это описано в книге "Haskell для чайников, или как перестать сопротивляться и полюбить тайпчекер"
кана
igo
это всё равно. задача была достаточно простой, чтобы человек сам разобрался. представь, что всякий раз, когда ты пытаешься что-то решить, тебе сразу спойлерят решение. так ничему не научишься.
кана
пытаться идти тут окольными путями это как пытаться объяснить, что нельзя складывать в хаскеле 2 + “qwe” не потому, что это разные типы, а + требует один и in Num, а как-нибудь через теоркат
Denis
А как заставить cabal пересобрать все установленные пакеты (был добавлен флаг PIC), но чтоб он использовал строго уже установленные версии, а не пытался их обновить?
Denis
cabal install —reinstall world пытается
Denis
вопрос снят: —force-reinstall не пытается (правда, всё равно не получилось - полезли странные ошибки, а ghc всё равно не собирает ничего, т.к. rts из haskell platform собран без PIC :( )
Denis
короче, подложили свинью с этим PIC-ом в Debian 9
Viacheslav
а подскажите плз хорошую либу для логгирования в файл?
kosc
log4j вроде перенесён уже повсюду, куда только можно.
kosc
Мб и до хаскеля добрались.
kosc
И нет, я не жавист.
Viacheslav
нет, не перенесен
Viacheslav
https://hackage.haskell.org/package/hslogger-1.2.10
Aleksei (astynax)
https://hackage.haskell.org/package/fast-logger
Viacheslav
я нашел такую штуку, но он во-первых с 2015 года не поддерживается, во-вторых там блин надо свой хэндлер писать