Нурлан
Часто приходится читать с двух сторон. Или это только меня смущает?!
Ilya
мне пока не приходилось разбирать чужой код на хаскелле, не считая кодов из учебников или руководств:)
Ilya
но конкретно этот однострочник никаких проблем в прочтении не вызвал. сообщения выше него не читал, т.е. контекста не знал
Влод
этот однострочник норм да. но вообще это серьёзная проблема в хаскельном комьюнити, что все стараются сделать покомпактней и (что хуже) назвать всё одной буквой
Влод
особенно в описании типа это прям железное правило называть типы a, b ,c, d... конечно обычно в контейнере типа списка нет никакой дополнительной информации о типе и там уместна произвольная буква
Ilya
я больше фрустрирую с кода типа (. map) . (.) . filter
Нурлан
я больше фрустрирую с кода типа (. map) . (.) . filter
Хм, а это повод помедитировать :)
Ilya
под влиянием этот примера, увиденного на ЛОРе, я даже придумал новый оператор "три точки" =) но являть его миру не решился
Нурлан
я больше фрустрирую с кода типа (. map) . (.) . filter
по сигнатуре похоже на filter . map
Ilya
ну что-то типа того, да. все три аргумента выкинули
Нурлан
побольшеб таких примеров, а то пока не получается в безточной нотации писать ))))
Ilya
с сигнатурой это чит
Нурлан
ее можно же руками вывести
Нурлан
давай
Влод
побольшеб таких примеров, а то пока не получается в безточной нотации писать ))))
она ок если комбинируешь функции с одним аргументом. дальше не стоит
Нурлан
она ок если комбинируешь функции с одним аргументом. дальше не стоит
иногда аргумент один, а точек входа внути строки у него две или более, а иногда хочется без него
Ilya
let (...) = (.) (.) (.)
Ilya
что делает оператор "три точки"? =)
Нурлан
а точки между точками не пропущены?
Ilya
нет
Ilya
можно ещё так (.) . (.)
Ilya
как удобно
Dan
(. ) ( .) Же
Нурлан
(. ) ( .) Же
да, только как на марсе (. ) ( . ) ( .)
Dan
Да да да! Мне нравится хаскель!
Dan
Нурлан
let (...) = (.) (.) (.)
что здесь делается понятно, после взятия сигнатуры, но как это в глове вывести... здорово
Влод
хз я не понял, первый аргумент функция возвращающая значение по функции. а это обычно очень специфичные функции
Влод
(. (.) (.)) :: ((a -> (a1 -> b) -> a1 -> c1) -> c) -> (a -> b -> c1) -> c
Влод
((a -> (a1 -> b) -> a1 -> c1) -> c)
Ilya
ты неправильно переписал функцию
Влод
а да
Ilya
Prelude> let f = (.) (.) (.) (...) :: (t1 -> t) -> (t2 -> t3 -> t1) -> t2 -> t3 -> t Prelude> let f = (^2) ... (+) Prelude> f 3 4 49
Ilya
у кого нет под рукой интерпретатора
Влод
(b -> c) -> (a -> a1 -> b) -> a -> a1 -> c ок понятно ну давайте тогда челендж: сконструировать на точках функцию с типом (b -> b1 -> c) -> (a -> b) -> a -> b1 -> c у самого пока нет догадок
Ilya
просто (.) ?
Нурлан
у (.) 2 входных переменных
Нурлан
а тут 4
Ilya
(.) :: (b -> c) -> (a -> b) -> a -> c где c = (b1 -> c)
Ilya
а тут 4
и всё же я настаиваю:)
Нурлан
(.) :: (b -> c) -> (a -> b) -> a -> c где c = (b1 -> c)
даже если, то переменных будет 3
Ilya
я не очень понимаю, о чём ты говоришь
Влод
лол
Нурлан
я не очень понимаю, о чём ты говоришь
самое простое что можно делать при проверке сигнатур, это смотреть на количество точек входа в функцию
Влод
у (.) 2 входных переменных
Влод
(.) :: (b -> c) -> (a -> b) -> a -> c где c = (b1 -> c)
Нурлан
у (.) 2 входных переменных
согласен лажанул
Влод
@newrlan как бы (.) сама по себе возвращает функцию. а тут мы ей передаём функцию... ну ты понял. тащемта я сам так норм лажанул с челенджом. хотя по-своему иронично
Ilya
для тех, у кого нет интерпретатора
Ilya
op1 f g x y = f (g x) y op2 = (.)
Ilya
*Main> :t op1 op1 :: (t1 -> t2 -> t) -> (t3 -> t1) -> t3 -> t2 -> t *Main> :t op2 op2 :: (b -> c) -> (a -> b) -> a -> c
Ilya
*Main> op1 (+) (^2) 4 5 21 *Main> op1 (+) (^2) 4 5 21
Ilya
ч.т.д.
igo
что там с идрисом? об эффектах уже рассказали?
Влод
я так себе и представлял конфу по хаскелю когда джойнился
Влод
но вообще я искал по истории идрис. так и не понял про какие конференции речь. мб про ту что сейчас в спб, по выходным. ещё увидел упоминание f* вообще андеграунд тема. deep web для фп
igo
да, речь про курс в CSclub
igo
он уже завтра заканчивается
Влод
ого
Влод
а ну да. 4 дня всего. не понятно зачем репозиторий закрытый
Нурлан
а вот такой вопрос
Нурлан
($) (.) = (.)
Нурлан
кто-нибудь размышлял?
Нурлан
или это не так
Влод
думаю (любая функция $) = этаже функция
Ilya
+
Ilya
по сути это можно считать определением $ в безточечной нотации
Ilya
или даже так ($) = id
Нурлан
или даже так ($) = id
сигнатуры не совпадают
Ilya
началось
Влод
ну если здесь знак равенства считать тем знаком равенства который пишем при определении сущности
Нурлан
id шире чем ($)
Ilya
и что?
Ilya
op :: (a -> b) -> a -> b op = id
Ilya
*Main> op (^2) 4 16
Влод
(тут я не знаю как это выразить словами... нельзя же сказать слово переменная. и константа тоже не очень) ($) = id ок id = ($) не ок в терминах хаскельного =