Говнячить одноразовые скрипты на хачкиле довольно удобно получается, не хуже бидона какого-нибудь.
Захотел скачать видосы отсюда: https://www.scss.tcd.ie/Edsko.de.Vries/ct/catsters/linear.php
Prelude> page <- readFile "linear.php" (лол, HTTP-4000 не может в https)
Prelude> :m + Text.HTML.TagSoup
Prelude Text.HTML.TagSoup> let a = [x | x@(TagOpen "a" _) <- parseTags page]
Loading package bytestring-0.9.2.1 ... linking ... done.
Loading package array-0.4.0.0 ... linking ... done.
Loading package deepseq-1.3.0.0 ... linking ... done.
Loading package containers-0.4.2.1 ... linking ... done.
Loading package text-0.11.2.3 ... linking ... done.
Loading package tagsoup-0.12.8 ... linking ... done.
Prelude Text.HTML.TagSoup> let a' = filter ((TagOpen "a" xs) -> maybe False (isInfixOf "youtube") (lookup "href" xs)) a
<interactive>:5:52: Not in scope: `isInfixOf'
Prelude Text.HTML.TagSoup> :m + Data.List
Prelude Text.HTML.TagSoup Data.List> let a' = filter ((TagOpen "a" xs) -> maybe False (isInfixOf "youtube") (lookup "href" xs)) a
Prelude Text.HTML.TagSoup Data.List> let a'' = map ((TagOpen "a" xs) -> fromJust $ lookup "href" xs) a'
<interactive>:8:37: Not in scope: `fromJust'
Prelude Text.HTML.TagSoup Data.List> :m + Data.Maybe
Prelude Text.HTML.TagSoup Data.List Data.Maybe> let a'' = map ((TagOpen "a" xs) -> fromJust $ lookup "href" xs) a'
Prelude Text.HTML.TagSoup Data.List Data.Maybe> :m + System.Process
Prelude Text.HTML.TagSoup Data.List Data.Maybe System.Process> mapM_ (\u -> system $ "youtube-dl " ++ u) a''
Ну в общем потыкал эти ваши лензы. Не, ну чо, реально удобно ковыряться в стейте и
теребить поля рекордов. По видосу эдика было как-то неочевидно. Ехал профунктор
через профунктор сунул моноид в эндофунктор.
Делал вот эту хуйню:
http://www.linux.org.ru/news/doc/8930414/page1#comment-8934133
(Автор камента правда мудак, так и не ответил, правильно ли я понял задачу,
но это в общем-то не важно).
Cмешной понос: http://bpaste.net/show/I3MXDooyj8v1K3gEpAlu/
Есть только подозрение, что это задротство с операторами уровня J назавра забудется.
http://www.haskell.org/pipermail/beginners/2013-March/011550.html
Похуй манатки, ясно как запилить.
Какой лучше применить комбинатор на замену явной рекурсии?
У меня получилось так:
fix (\r s -> let (a::String, b::String, c::String) = s =~ "[A-E]" in if null s then s else a++(map toLower b)++(r c))
Но это как-то уебищно.
inb4 map (\c -> if isJust (find (== c) ['A'..'E']) then toLower c else c)
Вот часто пишут, что изучение хаскиля сделает вас лучше писать на других языках.
У меня обратная ситуация, например. На других языках писать становится очень ссыкотно, и
постоянно лезет эта функциональная писечка (типа наебашить сто тыщ мелких функций и
потом комбинировать их по-всякому, или там ADT).
Недавно написал что-то в духе
struct foo {
int *bar;
...
}
struct foo *f = calloc(sizeof(*f));
...
if (...) {
f->bar = malloc(sizeof(int));
(*f->bar) = 5;
}
чтобы получить Maybe int = int * | NULL.
Пиздец, вощем, пацаны, не учите хаскиль, если вы тупой.