@haskellru

Страница 1335 из 1551
Timofey
12.07.2018
09:02:25
Вопросец такой: я для executables включил -Wmissing-import-lists, для библиотеки включать не стал. При этом ghc-mod в лице hie стал доблестно мне рапортовать этот варнинг для библиотечных модулей. Это так и должно быть ("варнинги спускаются вниз по транзитивности") или косяк hie?

shadowjack
12.07.2018
09:30:14
Как там по канону правильно, бесточечной нотацией писать?
Ну если читабельно, то point free. Если нет, то явно. Сравни flip3 f a b c = f c b a и flip3 = flip. (flip.). flip

Евгений
12.07.2018
10:49:03
Ну, мне не нравится, что в персистенте слишком руками

Google
Hot
12.07.2018
11:59:47
В общем, поревьюйте код плиз: https://hastebin.cuttlerat.ru/vibicevoyo.hs

Не хочу откровенный говнокод сразу на github лить.

И подскажите, что делает оператор (&&&) (этот кусок я на stackoverflow нашёл просто) ?

A64m
12.07.2018
12:02:25
(f &&& g) x = (f x, g x)

Vladimir
12.07.2018
12:02:31
то же, что и bimap в Bifunctor

A64m
12.07.2018
12:03:00
бимап это же ***

Vladimir
12.07.2018
12:03:40
э да, недосмотрел, извиняюсь

A64m
12.07.2018
12:04:26
вернее бимап более общий чем ***, конечно, это еще и +++ и т.д.

Hot
12.07.2018
12:06:45
Спасибо, вплоне понятно, кстати.

Pineapple
12.07.2018
12:07:44
я руками таплы в рекорды перековыриваю с postgresql-simple (postgresql-query)
Наверное можно автоматизировать с fixed-vector-hetero

Hot
12.07.2018
12:08:50
А по коду есть какие-нибудь замечания/предложения?

Ilya
12.07.2018
12:09:26
ты точно правильную ссылку скинул?:) что там ревьюить, две строчки

кидай весь проект

Google
Hot
12.07.2018
12:10:26
Так это и есть весь проект :)

Ilya
12.07.2018
12:10:47
сильно:)

Hot
12.07.2018
12:10:54
У меня пока даже такие маленькие куски кода на хаскеле через боль пишутся.

Когда будет легко - буду покрупнее что-то делать.

Линзы раскуривать, ещё сервант хочу потыкать.

Что бы более реальное что-то было.

Ilya
12.07.2018
12:11:38
Hot
12.07.2018
12:11:48
Ништяк, спасибо!

A64m
12.07.2018
12:17:41
В общем, поревьюйте код плиз: https://hastebin.cuttlerat.ru/vibicevoyo.hs
вместо filepath <- fmap head getArgs (filepath:_) <- getArgs лучше ошибка будет если что вокруг show count скобки не нужны

Hot
12.07.2018
12:18:22
Ух ты, да, так прикольнее, спасибо.

Kirill
12.07.2018
12:23:41
hlint про скобки подсказал бы, думаю

mapM_ + компрехеншн смотрится странновато

яб тупо сделал forM_ list $ \(word, count) -> do ...

ну или без бакса в 8.6 :)

A64m
12.07.2018
12:27:15
да, или for_

Kirill
12.07.2018
12:28:50
ну да, но с M как-то чуть явней как по мне, для тупых

A64m
12.07.2018
12:29:26
с другой стороны это до AMP реликт

Kirill
12.07.2018
12:30:08
олдскул :)

A64m
12.07.2018
12:30:11
совсем не удивлюсь, если с такими штуками в среднеотдаленном будущем бороться начнут, так что лучше не привыкать

Kirill
12.07.2018
12:30:59
с буквой M бороться будут?

Google
A64m
12.07.2018
12:31:43
да, с M-функциями вполне могут

так что я подозреваю, что такой код не фьючепруф

Kirill
12.07.2018
12:32:20
"Весь мир насилья мы разрушим", ну ок надеюсь в hlint по дефолту не скоро добавят

A64m
12.07.2018
12:33:58
я руками таплы в рекорды перековыриваю с postgresql-simple (postgresql-query)
по идее линзы должны генерировать iso между рекордом и соотв. туплом

Ilya
12.07.2018
12:37:04
спс

A64m
12.07.2018
12:38:10
один из лучших хаскельных едсл-ей - это комбинаторные парсеры, но таким уже никого не удивишь, конечно

Ilya
12.07.2018
12:38:36
хотя я имел в виду честно встроенный HDL

но ivory все равно интересно, посмотрю

Leonid
12.07.2018
12:41:57
по идее линзы должны генерировать iso между рекордом и соотв. туплом
там не один к одному. всякие Binary ByteString и прочая чухня

A64m
12.07.2018
12:43:27
ну, зависит от того какое соотношение того что один к одному, а что нет

shadowjack
12.07.2018
12:44:24
В общем, поревьюйте код плиз: https://hastebin.cuttlerat.ru/vibicevoyo.hs
Мне кажется тип main лучше явно написать. И fmap вместо map

Hot
12.07.2018
12:44:49
А в чём принципиальное отличие-то?

Kirill
12.07.2018
12:47:20
s/map/fmap/ это просто повод запутать новичков

имхо

shadowjack
12.07.2018
12:47:47
fmap работает на любом функторе, а map только на листах

A64m
12.07.2018
12:48:07
так там уже комбинация с функциями над списками

Kirill
12.07.2018
12:48:26
код не полиморфый, куда там любые функторы?

A64m
12.07.2018
12:48:55
т.е. от более полиморфного кода никакого эффекта кроме ухудшения вывода типов и вероятности (очень невысокой правда) получить неправильный код при модификации

Google
Kirill
12.07.2018
12:49:21
и ухудшение читабельности

если работает тупой код, не стоит его переусложнять на пустом месте

Ilya
12.07.2018
12:50:51
import Data.List (sort, group) import Data.Char (toLower) import Control.Arrow ((&&&)) import System.Environment (getArgs) import Control.Lens import Text.Printf wordCount :: String -> [(String, Int)] wordCount = map (head &&& length) . group . sort . words . map toLower format :: [(String, Int)] -> [String] format = map $ uncurry $ printf "%s %d" main = getArgs <&> head >>= readFile <&> wordCount <&> format >>= mapM putStrLn

@hotkosc поинт фри везде

A64m
12.07.2018
12:51:13
польза-то от мономорфного map в прелюдии конечно сомнительная, но раз уже есть - чего бы и не использовать

shadowjack
12.07.2018
12:53:53
Ну правый map он вообще над стрингом. Если переписывать на Text нужно будет менять.

Kirill
12.07.2018
12:56:35
и там ты оставишь fmap, а не заменишь на T.toLower?

и Text станет функтором

shadowjack
12.07.2018
13:01:37
Не, это я ерунду сказал

A64m
12.07.2018
13:20:15
считаем слова, используя смешной экстеншен, которым никто не пользуется > 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)]

Admin
ERROR: S client not available

Mikhail
12.07.2018
13:26:05
Уж лучше https://anton-k.github.io/ru-haskell-book/book/home.html
A как мы относимся к книжке Graham Hutton "Programming in Haskell"?

A64m
12.07.2018
13:29:35
а, ну тут понятно надо к одному регистру привести еще

A64m
12.07.2018
13:35:30
TransformListComp

Denis
12.07.2018
13:35:50
TransformListComp
о нем в книге Мена написано)

A64m
12.07.2018
13:40:11
если бы запрос был по списку рекордов, какая-никакая польза была бы лучше видна, так он конечно выглядит особенно вымученно

Anatolii
12.07.2018
13:41:06
Ну красиво ?

Hot
12.07.2018
13:42:25
А в GHCi как-то можно типы обозначать у создаваемых функций?

Google
Dmitry
12.07.2018
13:42:37
Мне вот этот подход понравился, когда хочется чего-то вроде ограниченнгого SQL для обработки таблиц в Haskell: * http://www.timphilipwilliams.com/posts/2017-04-12-nested-datacubes.html Я в одном проекте использовал, было довольно удобно (без этого вообще не получилось бы нормально сделать). Там надо просто кучу строчек по разным критериям аггрегировать несколько раз в разных извращениях. Правда, сначала потратил 3 дня, чтобы это осознать...

Hot
12.07.2018
13:42:39
Когда компилятор их сам вывести не может.

Dmitry
12.07.2018
13:43:57
А в GHCi как-то можно типы обозначать у создаваемых функций?
Да, можно. Нарпример, при помощи многострочного ввода: ghci> :{ ghci| foo :: Int -> Int ghci| foo x = x + 1 ghci| :}

Hot
12.07.2018
13:44:28
А, точняк, спасибо.

A64m
12.07.2018
13:44:40
да, или foo :: Int -> Int; foo x = x + 1 если в многострочный режим лень переключаться

A64m
12.07.2018
13:46:39
плохо, что сигнатура функции репл в многострочный режим не переключает, если автоматическая многострочность включена

Leonid
12.07.2018
13:47:58
Наверное можно автоматизировать с fixed-vector-hetero
Я считаю что это будет излишне. этот код ОЧЕНЬ просто тестировать на интеграцию с БД, и очень просто поправить.

т.е. тут, как мне кажется, лёгкий бойлерплейт который легко выкинуть будет лучше чем 30 минут компилящийся модуль

A64m
12.07.2018
13:50:01
чет работа по решению этой проблемы заглохла

A64m
12.07.2018
13:53:43
оно того не стоит.

shadowjack
12.07.2018
13:53:59
Можно еще инлайн let f = map (+1) . filter (==1) :: [Int] -> [Int]

A64m
12.07.2018
13:54:08
вообще, пока история репла с многострочными кусками не работает от многострочности толку мало

Dmitry
12.07.2018
14:04:50
Я когда пилил поддержку REPL'а для Kotlin в JetBrains, то там надо было сделать поддержку многострочного ввода по дефолту и с этим были заморочки. Там даже есть клёвая фича, что когда листаешь вверх, то сразу вся функция показывается, а не по одной строке, как в многострочном вводе ghci... Правда, когда в языке надо ставить фигурные скобки явно для выделения блоков, то это сделать проще

A64m
12.07.2018
14:07:06
ну я про это и говорю. история должна для всего многострочного куска работать

у эмелей репл в многострочном режиме по умолчанию обычно

там многострочный блок завершается ; или ;;

первый вариант вполне и для хаскеля рабочий

Hot
12.07.2018
14:09:45
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
12.07.2018
14:09:46
но истории нормальной и в эмелях нет

Hot
12.07.2018
14:09:54
Как думаете, этим можно джуна убить?

Страница 1335 из 1551