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
как наиболее халявно и без синглетонов AscList зопилить
без синглтонов можно на тайплевеле!
Alexander
у меня тут и так линейные типы, ещё и тайплевел тащить
Aliester
тайплевел это какой-то грязный хак?
Denis
а AscList это ascended list при вставке или я не так понял?
Alexander
+1 за haskell_learn
Зигохистоморфный
Alexander
@catamorphism да просто тип, в котором элементы упорядочены
Alexander
уже линейные типы юзаешь?
играюсь понихоньку
Зигохистоморфный
играюсь понихоньку
и как профит?)
Alexander
а какой ты от них хочешь профит?
Alexander
можно выразить требование линейности на типах
Alexander
пока ж никакой магии лишней нету
Alexander
типа off-heap хранения и т.п.
кана
тоже +1 за haskell_learn
Alexander
а чего бы сет просто не взять?
чтобы не терять повторные элементы, например
Зигохистоморфный
что за haskell_learn?
Denis
ну это мультисет обычно называется
кана
что за haskell_learn?
тебе туда нельзя будет, я надеюсь)
Denis
https://hackage.haskell.org/package/multiset
Egor
дошел до 9 главы io haskell_learn, до сих пор сдвинуться дальше не могу из-за нехватки времени ;(
Alexander
https://hackage.haskell.org/package/multiset
я сейчас просто играюсь с линейными типами, в общем-то толку от чужого мультисета нету
Alexander
хочу таки запилить сортировку, проверка того что все элементы на месте нахаляву есть
Alexander
а что сортированы нету
Denis
ну я сам пакет не юзал, просто это то, что ты хочешь
Denis
А какое отношение линейные типы к мультисету имеют тут?
Denis
может я вопрос не понял
Alexander
никакого, я играюсь с линейными типами и делаю (сделал) сортировку
Alexander
мне было интересно как добавить то, что они ещё и сортированы
Alexander
в идрисе кстати я даже такого не осилил с их UniqueTypes там это ад
Слава
Есть такой язык, пересекающийся с ada, называется ada spark. В нем можно сделать контейнер, который будет хранить элементы и давать гарантию, что элементы упорядочены. Но, для этого потребуется повесить постусловия на все методы работы с контейнером - вставка, удаление, и написать доказательство для верификатора. Как это сделать на типах - не представляю.
Евгений
В хаскель завезли линейные типы? :О
Denis
В хаскель завезли линейные типы? :О
завозят и еще долго будут, судя по всему
Denis
никакого, я играюсь с линейными типами и делаю (сделал) сортировку
думаю со значениями-синглтонами можно изобразить
Denis
но лучше мультисет, ей богу
Alexander
я не уверен что я нахаляву получу линейный мультисет
Alexander
точнее я так понимаю он вообще не может быть линейным просто ну никак
Denis
ни про что линейное я подсказать не могу, я в них не умею
Alexander
выложи гист
завтра, мне немного unsafe убрать надо
Евгений
завозят и еще долго будут, судя по всему
Можно рилворлд залинеинить?
Alexander
можно
Alexander
не знаю много ли с этого толку прям щас
Denis
Наверное можно, но зачем?
кана
Надо завести @haskell_learn
ну я создал, посмотрим, приживется ли, или все будут и дальше писать вопросы сюда
кана
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
Всё это описано в книге "Haskell для чайников, или как перестать сопротивляться и полюбить тайпчекер"
igo
@kana_sama ну вот что ты наделал?
+1, какая-то медвежья услуга получилась.
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 года не поддерживается, во-вторых там блин надо свой хэндлер писать