- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
splitOn :: (a -> Bool) -> [a] -> [[a]]
splitOn _ [] = []
splitOn f xs = removeEmpty $ takeWhile (not . f) xs: splitOn f (dropWhile (f) $ dropWhile (not . f) xs) where
removeEmpty [] = []
removeEmpty (x:xs)
| null x = removeEmpty xs
| otherwise = x: removeEmpty xs
words' :: String -> [String]
words' = splitOn (flip elem " \n\r\f\t\v\160")
bormand 25.11.2012 11:21 # −2
(takeWhile (not . f) xs, dropWhile (not . f) xs) = break xs
Итого:http://ideone.com/C6z4N9
LispGovno 25.11.2012 15:10 # −2
bormand 25.11.2012 15:31 # 0
anonimb84a2f6fd141 04.12.2012 21:03 # −1
bormand 04.12.2012 21:05 # 0
anonimb84a2f6fd141 04.12.2012 21:06 # −1
bormand 04.12.2012 21:08 # −1
anonimb84a2f6fd141 04.12.2012 21:07 # −1
anonimb84a2f6fd141 04.12.2012 21:07 # −1
anonimb84a2f6fd141 04.12.2012 21:07 # −1
bormand 04.12.2012 21:09 # −1
Fai 25.11.2012 18:14 # +2
Я пишу сигнатуру до написания функции, т.к. это дает ряд преимуществ:
1. По сигнатуре можно приблизительно понять, что делает функция, следовательно, если написать сигнатуру, будет проще затем написать саму функцию.
2. Сигнатура четко говорит компилятору, что мне требуется именно такая функция и это не дает мне ошибиться.
3. Нельзя также упускать из виду проблему let-связанного полиморфизма. Случается она конечно редко, но все-же.
В итоге идеальным решением будет написать сигнатуру перед написанием функции, а затем по-желанию убрать.
LispGovno 25.11.2012 18:59 # −2
например?
?
И как тут поможет сигнатура функци? Имхо сам как-бы глупость написал.
Fai 25.11.2012 19:46 # 0
Например для кода
Компилятор выведет тип:
Но он слишком частный. Почему он не вывел:
А все это ограничение.
В ghc есть специальный ключ, убирающий это ограничение - XNoMonomorphismRestriction, но это не по стандарту, так-что лучше просто записать сигнатуру.
LispGovno 25.11.2012 20:11 # 0
Fai 25.11.2012 20:15 # +2
Единственное - можно от него избавиться либо указав компилятору "ты дурак, вот он правильный тип" либо сказав "ты молодец, только вот XNoMonomorphismRestriction".
LispGovno 25.11.2012 20:20 # 0
Fai 26.11.2012 08:31 # +1
Да выведет правильный тип.
LispGovno 26.11.2012 00:31 # 0
А какой плюс в этом? Помоему больше минусов, чем плюсов.
Fai 26.11.2012 08:32 # +1
Никаких плюсов, это ограничение ввелось само-собой случайно, не по воле авторов стандарта или трансляторов.
Я вообще надеюсь, что в следующем стандарте или в следующей версии ghc это ограничение будет снято по-умолчанию.
LispGovno 26.11.2012 19:22 # −1
http://ideone.com/DT7x1V
http://ideone.com/aZ3Flk
Но если указать сигнатуру, или NoMonomorphismRestriction , то все нормально:
http://ideone.com/OIh4L7
http://ideone.com/M9mKx6
Fai 26.11.2012 19:25 # +1
"eq = (==)"
Офигеешь.
LispGovno 26.11.2012 19:28 # 0
А вот ad::(Num a) => a -> a -> a как-то не кузяво.
LispGovno 26.11.2012 19:31 # −1
Fai 26.11.2012 19:34 # 0
eq :: Eq a => a -> a -> Bool
LispGovno 26.11.2012 19:39 # −1
Fai 26.11.2012 19:44 # 0
LispGovno 27.11.2012 00:06 # −1
bormand 26.11.2012 19:32 # +1
P.S. А вообще да, поднимать надо до Rational.
LispGovno 26.11.2012 19:34 # −1
Зачем? Обощённого варианта ad::(Num a) => a -> a -> a должно хватить на всех. До него надо поднимать, имхо.
Fai 26.11.2012 19:36 # +1
LispGovno 26.11.2012 19:35 # −1
Переменные в моём чистом хацкеле! No Way!
bormand 26.11.2012 19:34 # +2
LispGovno 26.11.2012 19:37 # −1
bormand 26.11.2012 19:54 # +2
Работают намного быстрее списка из чаров\байтов. Ну и набор сверток, мапов и прочего к ним есть, который оптимизнут, и умеет в fusion.
P.S. Есть ленивый ByteString и строгий ByteString.
P.P.S. И без перегрузки строковых литералов нужно писать ByteString.pack "хуй", а с перегрузкой просто "хуй", и он сам сделает все что нужно.
LispGovno 27.11.2012 00:07 # 0
bormand 27.11.2012 01:17 # +1
LispGovno 27.11.2012 00:10 # −2
Fai 27.11.2012 00:15 # 0
LispGovno 27.11.2012 00:31 # +1
Fai 27.11.2012 01:10 # +1
Это же тоже самое что:
LispGovno 27.11.2012 08:01 # −1
Fai 27.11.2012 12:44 # 0
bormand 27.11.2012 13:34 # 0
Fai 27.11.2012 14:50 # 0
guest 27.11.2012 15:15 # 0
[ a | a <- zip xs ys ]
guest 27.11.2012 15:16 # 0
LispGovno 25.11.2012 19:04 # 0
> а затем по-желанию убрать.
Регулярно так делал (вне хаскеля конечно). Много раз об этом жалел, если приходилось править безсигнатурные функции, тк чтобы разобраться - приходилось возвращать сигнатуры обратно. Но это так сказать нарушало красоту кода и я их убирал обратно, потом снова возвращал и снова убирал и так несколько раз.
Fai 25.11.2012 19:49 # 0
Тут дело привычки. Мне больше нравится если есть сигнатура.
Обычно сигнатуры и имени функции достаточно, чтобы полностью понять, что она делает.
3.14159265 26.11.2012 18:43 # +5
Не пытайтесь код на Хацкиле писать!
В Хацкиле кортежи, в Хацкиле монады,
А еще там жесткие, злые лямбды.
Вам будут мозги рвать и убивать,
Не пытайтесь, дети на хацкиле писать.
Хацкил он статичный, Хацкил он урод
В Хацкиле ужасный типа "чистый" код.
Его форсят злодеи чтоб извращать детей -
Ленивый, нехороший - трогать его не смей!
И папочка и мамочка на говнокодике сидят,
И папочка и мамочка деткам говорят:
"Хацкил ужасен, да-да-да!
Хацкил опасен, да-да-да!
Хацкил ужасен, да-да-да!
Хацкил опасен, да-да-да!
Не учите Хацкиля, не пишите в Хацкиле,
Не учите Хацкиля, не пишите в Хацкиле,
Не учите Хацкиля, дети, никогда!"
3.14159265 26.11.2012 19:06 # +6
А Гумно и fai - GHC уже читают,
Хацкилем всех донимают,
Паттерн-матчинг постигают,
Ну и Хацкиль!
Вот так Хацкиль!
Типы нам не надо кодить
- он и сам их повыводит
Ну и Хацкиль!
Вот так Хацкиль!
Генератор списков оседлали
ProjectEuler погоняли
Ну и Хацкиль!
Вот так Хацкиль!
"Вон побочные эффекты
Распахнули злую пасть.
Сможете, вы, детки
на грабли не наступать?"
"Нам побочные эффекты
Нипочём, нипочём,
Мы побочные эффекты
Монаднём, Монаднём"
LispGovno 26.11.2012 19:17 # 0
Fai 26.11.2012 19:21 # 0
3.14159265 26.11.2012 19:31 # +2
Нет. Ведь это код
На говнокод, по-моему, можно постить вообще всё что угодно.
3.14159265 26.11.2012 19:28 # +7
Я понятный,
Я простой и я функциональный!
И мне не надо
Ни паттернизма,
Ни оопизма,
Я только хочу маленьких
(Да, очень маленьких!)
маленьких, коротеньких функций побыстрей!"
Он простотой своей прельщает,
Он параллелит каждый бит,
Он мусор сам весь собирает,
И слово страшное кричит:
"Крестоблядь, крестоблядь
Перестань говно писать"
А Гумно и fai смеются,
Не нарадуются:
"Ну и Хацкиль,
Что за Хацкиль -
Замечательный!"
Fai 26.11.2012 19:31 # +1
Govnocoder#0xFF 26.11.2012 22:03 # −1
Fai 26.11.2012 22:13 # +4
"Крестоблядь, крестоблядь
Перестань говно писать"
"Посмотри-ка побыстрей
Кто с на помощь к нам пришел!
Ужас всех крестоблядей
Добрый кодер ТарасБ!"
3.14159265 26.11.2012 20:53 # +5
Убежал он на геймдев и ревёт,
И Пушкова, и Пушкова
Обратным вызовом зовёт.
"Выходи-ка, поскорей!
Этих гадких детей
Корми калом побыстрей
И говна ты не жалей!"
Гумно с фаем задрожали -
Как Пушкова увидали.
Начали они бежать
Но Пушкову их догнать
Не составило трудов
Хацкиль ведь не может
Убегать быстрей крестов
И многопоточность тоже...
Но тут Гумно увидел:
"Посмотри-ка побыстрей
Кто с на помощь к нам пришел!
Ужас всех крестоблядей
Добрый кодер ТарасБ!"
Добрый кодер ТарасБ
К Гумну с faiем подбегает,
И крестозлодею,
Улыбаясь, говорит:
"Крестосударь, ну-ка
Развяжите, отпустите
Этих маленьких детей!
И давайте побыстрей!"
Но Пушков Тараса хватает
В крестобан его бросает.
Гумно плачет и рыдает,
Пушкова он умоляет:
"Пушков смилуйся над нами,
Отпусти нас поскорей
К нашей милой маме!
Похлебать её борщей
От неё мы убегать
Никогда больше не будем
А об императивном коде
Мы тоже не забудем!"
LispGovno 27.11.2012 00:00 # +1
3.14159265 04.12.2012 20:20 # 0
3.14159265 04.12.2012 20:48 # −1
"Пристрелю вас как собак"
А Гумно плачет: "Не надо
Я у мамочки дурак"
"Ну уж нет!!!"
Рявкнул Пушков, но ненароком,
Взяв крестовый пистолет,
Выстрелил себе он в ногу!
А в Гумна не смог попасть!
fai с Гумном на Хацкиль сели
Снова бросились бежать
И кричат "Скорее, ходу"
Так как Хацкиль туповат.
Ну а вот по говнокоду
Ровным строем пхпешники идут
Песню звонкую поют
(Вроде рифма, вроде складно
А послушать - копипаста)
Гумно с файем услыхали
И на помощь их зовут.
Те запыхавшись подбегают
И ответ им свой дают
"Маму с папой не слушались
А над нами насмехались
Что наши предки обезьяны
И мы кодим за бананы"
bormand 04.12.2012 21:11 # +1
3.14159265 04.12.2012 21:12 # +1
но, блин, не люблю неоконченные дела.
3.14159265 04.12.2012 21:25 # 0
Потом Пушкофу надоело за ними гоняться, он подобрел и они всё вместе ушли с говнокода раковать на геймдев. Где и умерли от рака жопы.
bormand 04.12.2012 21:28 # +1
И жили долго и счастливо, и умерли атомарно.
3.14159265 04.12.2012 21:32 # +1
guest 04.12.2012 21:39 # +3
и опустили