Ilya
@hotkosc поинт фри везде
A64m
польза-то от мономорфного map в прелюдии конечно сомнительная, но раз уже есть - чего бы и не использовать
eahqzsr
Ну правый map он вообще над стрингом. Если переписывать на Text нужно будет менять.
Kirill
и там ты оставишь fmap, а не заменишь на T.toLower?
Kirill
и Text станет функтором
eahqzsr
Не, это я ерунду сказал
A64m
считаем слова, используя смешной экстеншен, которым никто не пользуется > t = "foo bar baz foo foo bar" > [(the word, length word) | word <- words t , then group by word using groupWith , then sortWith by Down (length word)] [("foo",3),("bar",2),("baz",1)]
М
Уж лучше https://anton-k.github.io/ru-haskell-book/book/home.html
A как мы относимся к книжке Graham Hutton "Programming in Haskell"?
A64m
а, ну тут понятно надо к одному регистру привести еще
A64m
TransformListComp
Зигохистоморфный
TransformListComp
о нем в книге Мена написано)
A64m
если бы запрос был по списку рекордов, какая-никакая польза была бы лучше видна, так он конечно выглядит особенно вымученно
Anatolii
Ну красиво 😀
kosc
А в GHCi как-то можно типы обозначать у создаваемых функций?
Dmitrii
Мне вот этот подход понравился, когда хочется чего-то вроде ограниченнгого SQL для обработки таблиц в Haskell: * http://www.timphilipwilliams.com/posts/2017-04-12-nested-datacubes.html Я в одном проекте использовал, было довольно удобно (без этого вообще не получилось бы нормально сделать). Там надо просто кучу строчек по разным критериям аггрегировать несколько раз в разных извращениях. Правда, сначала потратил 3 дня, чтобы это осознать...
kosc
Когда компилятор их сам вывести не может.
Dmitrii
А в GHCi как-то можно типы обозначать у создаваемых функций?
Да, можно. Нарпример, при помощи многострочного ввода: ghci> :{ ghci| foo :: Int -> Int ghci| foo x = x + 1 ghci| :}
kosc
А, точняк, спасибо.
A64m
да, или foo :: Int -> Int; foo x = x + 1 если в многострочный режим лень переключаться
A64m
плохо, что сигнатура функции репл в многострочный режим не переключает, если автоматическая многострочность включена
Leonid 🦇
Наверное можно автоматизировать с fixed-vector-hetero
Я считаю что это будет излишне. этот код ОЧЕНЬ просто тестировать на интеграцию с БД, и очень просто поправить.
Leonid 🦇
т.е. тут, как мне кажется, лёгкий бойлерплейт который легко выкинуть будет лучше чем 30 минут компилящийся модуль
A64m
чет работа по решению этой проблемы заглохла
A64m
оно того не стоит.
eahqzsr
Можно еще инлайн let f = map (+1) . filter (==1) :: [Int] -> [Int]
A64m
вообще, пока история репла с многострочными кусками не работает от многострочности толку мало
Dmitrii
Я когда пилил поддержку REPL'а для Kotlin в JetBrains, то там надо было сделать поддержку многострочного ввода по дефолту и с этим были заморочки. Там даже есть клёвая фича, что когда листаешь вверх, то сразу вся функция показывается, а не по одной строке, как в многострочном вводе ghci... Правда, когда в языке надо ставить фигурные скобки явно для выделения блоков, то это сделать проще
A64m
ну я про это и говорю. история должна для всего многострочного куска работать
A64m
у эмелей репл в многострочном режиме по умолчанию обычно
A64m
там многострочный блок завершается ; или ;;
A64m
первый вариант вполне и для хаскеля рабочий
kosc
filter (\x -> all (\z -> z /= 0) [fromIntegral (mod (fromIntegral x) (fromIntegral y)) | y <- [2..(toInteger . fromIntegral . truncate . sqrt $ fromInteger x)]]) [toInteger . fromIntegral $ x | x <- [1..1000]]
A64m
но истории нормальной и в эмелях нет
kosc
Как думаете, этим можно джуна убить?
Dmitrii
В REPL, что я делал, был другой интерфейс: Enter — обычный перенос строки, а Ctrl + Enter — выполнить текущую команду
A64m
это на мой вкус мучительно слишком
A64m
когда я делал многострочный репл для себя, я просто делал переключение в многострочный режим энтером в пустой строке и выходил из него двумя энтерами
Andrei
красиво
A64m
а контрол энтер давить в 99% случаев как-то не весело
Oleg
Я когда-то юзал IHaskell для jupyter
Dmitry
И как?
Dmitry
Сравнимо с Python?
кана
Как думаете, этим можно джуна убить?
нет, понятный же вроде код, если разобрать из одной стоки
Oleg
Он, конечно, отстаёт и не всегда билдится, но в остальном приятно
Dmitry
По библиотекам?
Oleg
По библиотекам?
Oleg
Я его юзал вместо репла
Oleg
А не вместо пайтона
Dmitry
Сейчас, пример приведу
Dmitry
А
Dmitry
Что-нить типа такого можно в IHaskell нарисовать?
Dmitry
https://i.vas3k.ru/7e0.jpg
Dmitry
Или такое
Dmitry
https://i.vas3k.ru/7e1.png
Dmitry
?
Dmitry
Я не в плане потроллить, а в плане узнать возможности. Есть такое?
A64m
мне жупитер (и его не сильно успешный клон) никогда особо не нравились
Oleg
Я не в плане потроллить, а в плане узнать возможности. Есть такое?
технически у ядер нет различий в возможностях
Oleg
поэтому всё, что можно пыхтоном, можно чем-угодно другим
A64m
но интерфейс а-ля математика для хаскеля хотелось бы иметь, конечно
Dmitry
Ну я плохо знаю ядра, просто мне кажется, что вон те карты рисуются какими-то питоновскими либами
Dmitry
Т.е. просто так их к IHaskell не подключить
Dmitry
Или можно?
Oleg
Ну я плохо знаю ядра, просто мне кажется, что вон те карты рисуются какими-то питоновскими либами
вон те карты рисуются не важно чем, это просто визуализация json а, а не питона
Oleg
Всё остальноё работает через специальный вывод в HTML, который в IHaskell конфигурируется вполне
Oleg
Было бы желание
Dmitrii
Как думаете, этим можно джуна убить?
Вот этим можно: take 5 $ fix (((<$>) <$> ( : ) <*> ((=<<) <$> (return <$>) <$> ( *) <$> join (+))) 1)
kosc
ЭПИК!
kosc
Спасибо, мне нравится.
kosc
Что делает?
kosc
fix откуда?
kosc
В GHCI с Prelude не нашёлся.
Dmitrii
fix откуда?
Data.Function
kosc
Ок