LINUX.ORG.RU

Вышел новый стандарт Haskell

 ,


0

1

Саймон Марлоу (Simon Marlow) опубликовал анонсированный ранее Haskell 2010 Report (HTML, PDF).

Основные изменения:

  • Добавлен Numeric
  • Добавлено System.IO.Error.{catch,try,ioError}
  • Исправлено множество багов.

Также Саймон указал на то, что чуть позже, в этом году появится новая ревизия Хаскелля, а также что с этого момента он передаёт полномочия главного редактора документа спецификаций главе комитета Хаскелля 2011 года, Малькольму Воллесу (Malcolm Wallace).

>>> Подробности



Проверено: catap ()
Ответ на: комментарий от anonymous

> если кто-то ковыряется в говне и ему это доставляет удовольствие до поросячьего визга, то теперь все должны бросаться в это дело по уши? ) нет уж, спасибо ))

Если Вы говно и постите говнокомменты, то из-за этого нам нельзя заниматься любимым делом?

anonymous
()
Ответ на: комментарий от bernd

12 лет между стандартами - это имхо нормально.
Это все же не такое мельтешение, как. например:
C++'1998 - C++'2003 - C++0x
или, там, паскаль:
1983 - 1989 - 1994 - ...

12 лет - это более похоже на Фортран: 66-77-90... :)

impfp
()
Ответ на: комментарий от matumba

Фолдинг и рекурсия - более высокие уровни абстракции

oh
()
Ответ на: комментарий от matumba

Вы на циклах и goto, без рекурсии, как-нить попробуйте дерево каталогов обойти. Лично у меня в голове такое решение не сложилось.

impfp
()
Ответ на: комментарий от anonymous

fold (+) 0 list


Кто здесь на ком стоит?

А если в цикле логика нетривиальная, если 2-3 if-а? Как тогда записывать (+)?

Karapuz ★★★★★
()
Ответ на: комментарий от impfp

getRecursiveContents :: FilePath -> IO [FilePath]

getRecursiveContents topdir = do
names <- getDirectoryContents topdir
let properNames = filter (`notElem` [".", "..«]) names
paths <- forM properNames $ \name -> do
let path = topdir </> name
isDirectory <- doesDirectoryExist path
if isDirectory
then getRecursiveContents path
else return [path]
return (concat paths)

(forM это просто mapM, у которого аргументы поменены местами)

anonymous
()
Ответ на: комментарий от Karapuz

> Как тогда записывать (+)?
Функцией. Или проще фильтром

oh
()
Ответ на: комментарий от anonymous
getRecursiveContents :: FilePath -> IO [FilePath]

getRecursiveContents topdir = do
    names <- getDirectoryContents topdir
    let properNames = filter (`notElem` [".", ".."]) names
    paths <- forM properNames $ \name -> do
        let path = topdir </> name
        isDirectory <- doesDirectoryExist path
        if isDirectory
            then getRecursiveContents path
            else return [path]
    return (concat paths)
anonymous
()
Ответ на: комментарий от matumba

>Просто поражают эти любители факториалов и фибаначей засирать людям моск.

В мире есть задачки поинтереснее, чем в вижуал студио формочки рисовать. И в основе многих привычных вещей тоже лежит математика. Вон, реляционные базы данных были 40 лет назад не более чем теорией.

Цикл - такая же нормальная алгоритмическая единица, как и goto. Решать задачи через рекурсию может быть и клёво (если ещё и пыхнуть), но абсолютно тупо в плане очевидности алгоритма и его поддержки.

Зависит от алгоритма.

Мэйнстрим не терпит идиотов и клоунов, поэтому там нет Хацкеля.

Мэйнстрим - это люди, которым некогда думать, и надо прыгать. В ближайшие 5-10 лет, микрософт, сап, 1с и прочие, сделают продукты, которые устранят эту необходимость: дизайнеры смогут сами делать веб-сайты не вникая в пых-пых/жабу/базы данных, бухгалтеры тоже смогут конфигурить учёт без помощи эникейщиков. Так что работники мэйнстрима через 10 лет будут востребованы, настолько же сильно как сейчас востребованы телемастера. Не знаю, сколько Вам лет, поэтому уточню, что 20-25 лет назад телемастер был очень почётной и востребованной профессией.

alt-x ★★★★★
()
Ответ на: комментарий от anonymous

Вы на циклах и goto, без рекурсии, как-нить попробуйте дерево каталогов обойти

getRecursiveContents topdir ... getRecursiveContents path ...

Цикл, значит?

impfp
()
Ответ на: комментарий от AVL2

Благодарю за не очень обширное, но вежливое разъяснение. На ЛОРе с этим туго.

NIR
()
Ответ на: комментарий от impfp

FORTRAN успешен. :3 Так что можно надеяться на лучшее.

NIR
()
Ответ на: комментарий от matumba

>Цикл - такая же ненужная алгоритмическая единица, как и goto.

исправленному верить.

AVL2 ★★★★★
()
Ответ на: комментарий от impfp

>Вы на циклах и goto, без рекурсии, как-нить попробуйте дерево каталогов обойти.

Запросто. Нужно просто со стеком ручками работать. Впрочем, код получится такой, что любой отважившийся его прочитать, прямиком отправится в психушку.

Zenom ★★★
()
Ответ на: комментарий от alt-x

> Мэйнстрим - это люди, которым некогда думать, и надо прыгать.

Собственно, кажется, что основная причина всех войн на тему ФП вообще, и Haskell в частности, это невероятный уровень снобства и чванства со стороны носителей соответствующих идей. Считать других идиотами много ума не надо и каждый идиот считает себя самым умным. Простая вещь заключается в том, что среди использующих и пропагандирующих Java/PHP/etc есть много умных людей, а учитывая общее количество разработчиков на этих языках, то количество действительно умных и сильных Java/PHP/C++/etc-разработчиков намного превышает численность всех разработчиков на Haskell вместе взятых. При этом они ведут себя значительно более толерантно и поэтому вызывают большее уважения, а их мнение ценится выше.

archimag ★★★
()
Ответ на: комментарий от anonymous

>Расскажи мне, математик, что и в какой организации лично ты официально пишешь на скале и сколько тебе за это платят.

Анонимус, я пишу на Scala. За деньги. Пишу, причём, натуральную попсу а не что-то полное матана.

Zenom ★★★
()
Ответ на: комментарий от oh

>То есть эмулировать рекурсию? %)

Именно. Только без опасности срыва стека.

Zenom ★★★
()
Ответ на: комментарий от oh

Я как-то даже примеры писал. В l-t@c.j.r у нас зашёл разговор о том, можно ли любую рекурсию сделать хвостовой. Можно погрепать логи, там должны быть мои исходники на OCaml.

Zenom ★★★
()
Ответ на: комментарий от AVL2

>>Да 90% всех говнокодеров будет Хаскель только до пенсии осваивать и зачем? Чтобы написать одну едиснвтенную программу и умереть?

это было бы неплохо.

Что, говнокодеры конкуренцией достали? Хочешь всех порешить, и сам говнокодить?

anonymous
()
Ответ на: комментарий от archimag

> Собственно, кажется, что основная причина всех войн на тему ФП вообще, и Haskell в частности, это невероятный уровень снобства и чванства со стороны носителей соответствующих идей. Считать других идиотами много ума не надо и каждый идиот считает себя самым умным. Простая вещь заключается в том, что среди использующих и пропагандирующих Java/PHP/etc есть много умных людей, а учитывая общее количество разработчиков на этих языках, то количество действительно умных и сильных Java/PHP/C++/etc-разработчиков намного превышает численность всех разработчиков на Haskell вместе взятых. При этом они ведут себя значительно более толерантно и поэтому вызывают большее уважения, а их мнение ценится выше.

Если я скажу, что конкретно Вы - идиот с завышенным ЧСВ, а Лисп - унылое, ненужное говно и Вы ответите, что нет, не идиот и не говно. Будет ли это с Вашей стороны снобством и чванством? Почему только идет речь о функционалке, сразу вылазит куча идиотов, считающих функциональщиков яйцеголовыми чванливыми идиотами? Вам не кажется, что это смахивает на ситуацию с неграми на Западе? (негры на Западе используют расизм для того, чтобы вить веники из белых). И было бы неплохо, если бы Вы лично, посмотрели на западные сообщества функциональщиков. За несколько лет я не увидел там никакого чванства. Собственно, как и нападок со стороны императивщиков. Видимо дело не в функционалке и Хаскелле, а, скорее, в русском менталитете.

anonymous
()
Ответ на: комментарий от matumba

Цикл - такая же нормальная алгоритмическая единица, как и goto. Решать задачи через рекурсию может быть и клёво (если ещё и пыхнуть), но абсолютно тупо в плане очевидности алгоритма и его поддержки.

1) Рекурсию в хаскеле используют не на много чаще, чем в других языках.

2) Я уже показывал циклы

main = do 
    forM_ [1..10] $ \i -> do 
        putStrLn $ "Ololo number: " ++ show i 
Waterlaz ★★★★★
()
Ответ на: комментарий от matumba

> Вы вообще за деньги работали?

За деньги пишу на жабе 9 лет уже. Встречный вопрос, ты когда-нибудь разработкой чего-нибудь сложнее Ынтырпрайз-приложений АКА вебморд к базам данных занимался? Или всё, что ты умеешь - это слепить готовые компоненты, и все твои знания - это знания API спрингов и хибернейтов?

pitekantrop ★★★
()
Ответ на: комментарий от anonymous

> Если я скажу, что конкретно Вы - идиот с завышенным ЧСВ, а Лисп -

унылое, ненужное говно и Вы ответите, что нет, не идиот и не говно.

Будет ли это с Вашей стороны снобством и чванством?



Нет, не будет, если я не буду использовать слова быдлокодер, быдло-задачи и т.п., и не буду демонстрировать подобное отношение каким-либо другим способом. С людьми, использующим подобную риторику, вообще не стоит общаться. Я ненавижу слово «быдло», которое, кажется, придумали для самоидентификации и стали распространять на других (типа, такие же как и я). Негативная реакция со стороны анонимусов (и не только их) на ФП, является, прежде всего обратной на высокомерие некоторых последователей ФП - люди то не идеальны и всех захватывают эмоции, особенно когда их постоянно и безосновательно причисляют к «быдлу».

В итоге, вместо обсуждения достоинств или недостатков происходит выяснение отношение кто есть большее быдло. А это как ядерная война - все в говне.

archimag ★★★
()
Ответ на: комментарий от oh

>Хм.. прикольно. Я как-то думал, что это больше к социальным наукам тянется.

Туда можно кучу всякой статистики и методов ранжирования засунуть - ничем не хуже Брина:)

r ★★★★★
()
Ответ на: комментарий от archimag

> Простая вещь заключается в том, что среди использующих и пропагандирующих Java/PHP/etc есть много умных людей, а учитывая общее количество разработчиков на этих языках, то количество действительно умных и сильных Java/PHP/C++/etc-разработчиков намного превышает численность всех разработчиков на Haskell вместе взятых.

Да не видел я ни одного умного программиста на жабе, которому бы не была интересна скала.

pitekantrop ★★★
()
Ответ на: комментарий от matumba

>Какая-то у вас странная (хацкельская?) логика: вы перечисляете правильные мысли, но вывод делаете достаточно неадекватный.

да нет, нормальная логика.

клиенту кажется, что если оразработка на жабе, так она будет понятна любому жабакодеру. А это не так.

Вы вообще за деньги работали? А нанимали кого-то? Вот когда из своего дырявого кармана с двадцаткой вы заплатите хотя бы пятёрке «жабокодеров» за годичный проект, тогда и начинайте рассуждать, почему эти ослы никак не хотят изучать «хацкель/скалу/досыпать-говно-по-вкусу». :)

Звучит как. Вы когда нибудь выбрасывали деньги на ветер? сидели на жирном заказе, пытаясь за копейку нанять таджиксофтфаре? Вот попилите, а там рассуждайте.

Люди РАБОТАЮТ,

в стоило бы подумать, прежде чем месить говнокод.

а для профессионального результата голова должна быть занята 25 часов в сутки, причём не борьба с «почему эта скобка не выдаёт результат»,

И в итоге 99% времени они ищут, почему код не работает, как того от него ждут.

а намного более высокие проблемы - архитектура, оптимизация, тесты...

дадада. Сначала написали, а затем 25 часов в сутки думы об архитектуре и оптимизации, ибо не работает, не успевает...

И как и везде

нет. есть альтернатива тупому быдлокодерству.

ВСЕ ОНИ должны сесть и писать код.

точнее, переписывать код, потому как понять написанное не могут. Отсюда и вечный завал.

AVL2 ★★★★★
()
Ответ на: комментарий от anonymous

>Что, говнокодеры конкуренцией достали? Хочешь всех порешить, и сам говнокодить?

да нет. просто было бы гораздо больше хороших, годных программ.

AVL2 ★★★★★
()
Ответ на: комментарий от Karapuz

>А если в цикле логика нетривиальная, если 2-3 if-а? Как тогда записывать (+)?

fold это только один из тройки fold,filter,map. Все три вполне помогают это описать значительно менее страшно чем циклом.

И ветвления никто не отменял. С лямбдой, с функцией - все тот же фолд, только вместо (+) - myf или (\x ->...).

r ★★★★★
()
Ответ на: комментарий от AVL2

Вот, типичный пример человека, считающего, что в индустрии только идиоты работают, или что большая часть разработчиков идиоты. Поскольку почти все (ну кроме таких) знают, что это не так и по работе приходиться сталкиваться с вменяемыми и достаточными умными людьми, то и веры подобному персонажу нет.

archimag ★★★
()
Ответ на: комментарий от Zenom

>Анонимус, я пишу на Scala. За деньги. Пишу, причём, натуральную попсу а не что-то полное матана.

+1

r ★★★★★
()
Ответ на: комментарий от oh

В любой большой библиотеке. Как пример - setTimeout принимает функцию, без параметров. Но параметры передать нужно. Тут замыкания и помогают.

AlexKiriukha ★★★★
()
Ответ на: комментарий от archimag

> Нет, не будет, если я не буду использовать слова быдлокодер, быдло-задачи и т.п.

Это уже культурные особенности оратора, которые ортогональны к его интеллекту. Очень многих посмотреть в сторону ФП и Лиспа заставил ВСЛ, который, по-моему, и ввёл эту приставку в обиход.

pitekantrop ★★★
()
Ответ на: комментарий от matumba

В очень многих задачах рекурсия очень логична и сильно упрощает понимание. Те же деревья тут уже упомянули. Разные операции с деревьями становятся элементарными, если применить рекурсию: «обработать корень - обработать все поддеревья».

anonymous
()
Ответ на: комментарий от archimag

> Вот, типичный пример человека, считающего, что в индустрии только идиоты работают, или что большая часть разработчиков идиоты. Поскольку почти все (ну кроме таких) знают, что это не так и по работе приходиться сталкиваться с вменяемыми и достаточными умными людьми, то и веры подобному персонажу нет.

Все вменяемые разработчики, с которыми я сталкиваюсь по работе, смотрят в сторону скалы.

Снобизма и высокомерия к людям у меня нет - херовые разработчики могут быть прекрасными людьми в жизни.

pitekantrop ★★★
()
Ответ на: комментарий от impfp

паскаль дополнялся, а не изменялся. совместимость осталась.

bernd ★★★★★
()
Ответ на: комментарий от n01r

Угу... а главное среди них не запутаешься: map, fmap

если разбираешься в предметной области - не запутаешься. для списков fmap = map, кстати говоря

liftM, liftM2

если сложности начинаются со счёта до двух, это явно проблема не хаскеля ;)

jtootf ★★★★★
()
Ответ на: комментарий от AVL2

>> Что, говнокодеры конкуренцией достали? Хочешь всех порешить, и сам говнокодить?

да нет. просто было бы гораздо больше хороших, годных программ.

То есть, говнокодеры мешают хорошим программистам писать хорошие годные программы? Каким образом?

anonymous
()
Ответ на: комментарий от archimag

>> Мэйнстрим - это люди, которым некогда думать, и надо прыгать.

Простая вещь заключается в том, что среди использующих и пропагандирующих Java/PHP/etc есть много умных людей

Само собой. Но большинство из них никак не связано с мэйнстримом. На той же жабе - программер, кодящий веб-магазин существенно отличается от программера, разрабатывающего новый ORM. Более того, часть людей по вечерам программирующих на Хаскеле, при свете дня программирует на Java/.Net .

При этом они ведут себя значительно более толерантно

А. То есть тех, кто орёт, что хаскел не нужен, вы не включаете в подмножество умных. По-большому счёту Вы правы, но мир не чёрнобел, и в нем много исключений. Юношеский максимализм часто является причиной аррогантности, которая проходит со временем.

и поэтому вызывают большее уважения, а их мнение ценится выше.

Среди кого?

alt-x ★★★★★
()
Ответ на: комментарий от anonymous

В какой организации вы работаете, официально пишете на Хаскелле и какие проекты?

Luxoft Kiev ESG, работаем на Harman/Becker Automative Systems. из какой области проекты у HBAS - несложно нагуглить

jtootf ★★★★★
()
Ответ на: комментарий от archimag

Довольно непоследовательно утверждать, что

Я ненавижу слово «быдло»

И при этом использовать его в тексте 4 раза.

alt-x ★★★★★
()
Ответ на: комментарий от matumba

Что такое хелловорлд? Это вот:
print «Hello world»

Всё остальное (включая хацкель) - от лукавого.

не хочу тебя расстраивать, но хелловорлд на хаскеле именно так и выглядит

jtootf ★★★★★
()
Ответ на: комментарий от anonymous

>В очень многих задачах рекурсия очень логична и сильно упрощает понимание.

Все даже проще - «очень логичен» процесс вычислений описанный как функция от аргументов возвращающий результат.

Вида list.filter(условие).map(трансформация).fold(вычисление).

Вместо кучи временных переменных с состоянием индексов и беготни.

Дальше все становится совсем интересным - проекции, ленивые структуры, бесконечные структуры....

Алгоритмы в принципе по другому пишутся.

r ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.