Anonymous
чувааак, ты с чего начал?
Igor
курс по Скале кстате сильно помогает потом Хаслель воспринимать
мне как-то наоборот, тайпклассы и композиция функций легче дается в haskell, чем в scala
Igor
чувааак, ты с чего начал?
на coursera есть курсы по Scala, еще можно почитать SICP
Anonymous
*а я петон...*
Ruslan
мне как-то наоборот, тайпклассы и композиция функций легче дается в haskell, чем в scala
типы данных и чистота функций в целом заходят и так наура, если мозг в эту сторону повёрнут, это да. Курс по Скале помогает алгоритмы по другому представлять
Ruslan
только он усыпляет очень хорошо )
Anonymous
у кого какой самый первй ЯП?
Anonymous
(исключая паскаль и бейсик)
Anonymous
?
Alexander
Оператор композиции (.), похожий на один вожделенный мужчинами объект, проще понимать на примере текста и манипуляции с ним
Alexander
myText :: String myText = "ABC123" transformation :: String -> String transformation = surroundByBrackets . lowercase . lettersOnly -- Will be "(abc)" transformedText :: String transformedText = transformation myText
Alexander
Вот эта связка - surroundByBrackets . lowercase . lettersOnly - это функция от одного аргумента, которая протаскивает этот аргумент справа налево через все внутренние функции
Ю ли я? 🤔
как например что-нибудь сделать N раз?
replicateM, но вообще зависит от задачи.
Ilya
^ пошла токсичность 👌
Alexander
Вижу
Alexander
Ну и все внутренние функции, соответственно, тоже от одного аргумента. Потому что мы можем эту связку наращивать или сокращать, если нужно
Евгений
https://www.tiobe.com/tiobe-index/ скала пробилась в топ-20, лютая победа около-фп
A64m
такое с тиобе бывает постоянно, какой-то язык выскакивает в топ, а потом падает обратно, можно не обращать внимания, методика там адская
Andrey
вот сегодня старый добрый чатик - заходят люди незнакомые с функторами и ~сись~ прочими композициями, ахают как сложно.... не то что 1Е3 сообщений про алгебру на типах с профункторами
Oleg
вы проста завидуите оххоххоххо
Aleksei
Ребят, может немного помочь? Немного тупой вопрос, только начал учить Есть какой-то список и какая-то стрелка Клейсли let list = [1..4] let k = \x -> [x*2] Почему list >>= k отрабатывает без ошибок, а do {arr; k} падает? Как заставить это дело через do-нотацию работать?
Aleksei (astynax)
Что получится, если рассахарить do { arr; k }?
Aleksei
Я так понял, что это тоже самое, что через bind, но можно еще вытащить промежуточное значение do arr arr2 <- k arr3 <- k
Aleksei (astynax)
arr >> k т.е. arr >>= \_ -> k ("отбрасываем результат предудущего шага и делаем следующий")
Aleksei (astynax)
а нужно сделать arr >>= k, т.е. arr >>= \x -> k x, или в do-нотации do x <- arr k x
Алексей
Из чистой вредности λ> :t do { const list ; k } do { const list ; k } :: Num b => b -> [b]
Aleksei (astynax)
это другая монадка уже (в вопросе - [], тут - (->) r)
Алексей
Зато таинственно тайпчекается
Aleksei
Сработало. А промежуточное значение разве не должно и так в след функцию бросаться? Мы же не пишем arr >>= (\x -> k x), а просто arr >>= k
Aleksei
а нужно сделать arr >>= k, т.е. arr >>= \x -> k x, или в do-нотации do x <- arr k x
Maxim
тебе не кажется, что \x -> k x и k это одно и то же? :)
Aleksei
Кажется. Вот поэтому и спрашиваю, почему мой исходный вариант не работал, а вариант @astynax сработал. В чем разница?
Алексей
А что можно использовать чтобы гонять CI на винде для опенсорца на гитхабе?
Maxim
appveyor
Алексей
Спасибо
IC
Кажется. Вот поэтому и спрашиваю, почему мой исходный вариант не работал, а вариант @astynax сработал. В чем разница?
a; b рассахаривается в a >> b, а не в a >>= b. (>>) не требует от правой (т.е. следующей после ;) функции принимать аргумент
Aleksei (astynax)
> А промежуточное значение разве не должно и так в след функцию бросаться? не должно. do foo x <- bar baz x рассахаривается в foo >>= \_ -> bar >>= \x -> baz x никакого магического "и так" нет. Всё передаётся только явно
Антон
Народ, была задачка — заменить каждый элемент списка (в оригинале массива, но не суть) на произведение всех остальных элементов массива. Один парень предложил такое решение: magic = fmap =<< div . product main = print $ magic [1,2,3,4] Вопрос: как это работает? Я не понимаю
Антон
hint: magic x = (div . product >>= fmap) x смотри как определён (>>=) для типа (-> r)
Всегда этот инстанс затруднения вызывал. Сейчас гляну
IC
это аналог Reader если так легче
Антон
Этот инстанс ведь в base определён?
IC
да
Антон
instance Monad ((->) env) where return = const f >>= g = \x -> g (f x) x Что ж, это объясняет, почему аргумент используется два раза
Ю ли я? 🤔
Мне кажется, или (>>=) в этом контексте - это S-комбинатор с переставленными аргументами?
Антон
где?
В чате, где это решение скинули
Антон
Ссылку на чат кидать не буду, чтоб рекламой не считали
Alexander
полезное тогда замечание тут
A64m
на мутабельные объекты в 8.6 можно не надеяться
Зигохистоморфный
а на что можно надеяться?
Евгений
На синтаксический сахар?
A64m
на quantified constraints можно, на deriving via вроде можно, внезапно авторы линейных типов заявляют что надеятся можно, но я бы не советовал
Евгений
А какой дерайвингвиа примут? Их вроде много было
A64m
на или паттерны надежда небольшая, но побольше
A64m
qc приняты рулевым комитетом и имплементированы dv видимо со дня на день будет принят и имплементирован orp видимо имплементированы, переданы на рассмотрение в комитет, но комитетчик который должен подготовить обзор для комитета и предварительные выводы ничего не делает с марта месяца
A64m
про линейные типы Пикеринг написал буквально следущее > I am also working on the linear types branch. Arnaud is quite keen for it to be ready for 8.6 but we still have a bit to go. но это его сообщение проигнорировано судя по всему
A64m
заморозка 8.6 в июне
A64m
также может быть несколько мелких фич вроде подчеркиваний в литералах (которые точно будут, там надеятся не надо), но не факт
A64m
(возможно) будут неязыковые фичи еще, вроде улучшенных предложений подстановок для дырок и функционал хип-вью в комплекте, но я не так подробно за неязыковыми фичами слежу, так что их обзор не готов пока
A64m
но вообще надо переключаться на обзоры неязыковых фич, конечно, с языковыми последнее время не важно дела обстоят
A64m
magic = zipWith (*) <$> scanl (*) 1 <*> (tail . scanr (*) 1)
Alexander
Нубский вопрос. Альяс конструктора типа АТД задать можно. Можно ли задать альяс конструктора значений?
Dmitry
типа data X = Z a b c, alias = Z?
Cheese
Alexander
pattern synonymous не позволяют?
Alexander
типа data X = Z a b c, alias = Z?
Да. Я больше про Maybe думаю. Иногда не хочется создавать свой изоморфный ему тип, а просто переименовать
Alexander
pattern synonymous не позволяют?
Не слышал о такой штуке. Спасибо, покурю
Dmitry
Ну так Z -- это и есть функция a -> b -> c -> Z