LINUX.ORG.RU

Haskell 2010

 , haskell 2010, haskell-prime,


0

0

В списке рассылки появилось сообщение от Simon Marlow, где объявляется о новой ревизии языка Haskell — Haskell 2010.

Расширения, которые вошли в новый стандарт:

  • DoAndIfThenElse
    Синтаксис if-then-else будет выглядеть как «exp -> if exp1 [;] then exp2 [;] else exp3».
    «then» и «else» можно будет располагать на одном уровне.
  • HierarchicalModules
    Иерархическая структура модулей наконец-то войдёт в официальный стандарт.
  • EmptyDataDeclarations
    Конструкторы типов без конструкторов данных (это типы с единственным значением: _|_).
  • FixityResolution
    Изменения в синтаксическом разборе операторов с приоритетами. Важно только для официального отчёта.
  • ForeignFunctionInterface
    Давно использующийся FFI тоже войдёт в Haskell2010.
  • LineCommentSyntax
    Небольшое исправление, связанное со строчными комментариями.
  • PatternGuards
    Сопоставление с образцами в охраняющих выражениях.
  • RelaxedDependencyAnalysis
    Ослабленный анализ зависимостей: при выводе типов игнорируются ссылки на связанные переменные с явно указанными типами. Monomorphism restriction is gone.
  • LanguagePragma
    В отчёте будет упоминаться прагма «LANGUAGE» с расширениями: DoAndIfThenElse, HierarchicalModules, FixityResolution, PatternGuards, NoNPlusKPatterns, RelaxedDependencyAnalysis, LineCommentSyntax, EmptyDataDeclarations, LanguagePragma и ForeignFunctionInterface.
    Реализация, поддерживающая прагмы, должна обрабатывать «{-# LANGUAGE Haskell2010 -#}» (включает все вышеперечисленые расширения).
  • NoNPlusKPatterns
    Убран вариант синтаксиса при сопоставлении с образцом вида «n + k» для натуральных чисел.

Подробнее обо всех расширениях можно узнать здесь:
http://hackage.haskell.org/trac/haske...

>>> Сообщение в списке рассылки

Ответ на: комментарий от jtootf

>да, синтаксис - это ужасно

Лично меня пугает то что ты на нем не смог функцию time() реализовать. Я вообще не представляю какие могут быть проблемы с time() и как time() может быть связан с IO, причем с каким-то unsafe IO.

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

потому что у тебя ИГМ (императив головного мозга) функция в математическом смысле на одинаковых аргументах должна возвращать одинаковые значения, а time() или random() так не делают, поэтому они связаны с IO, что впрочем очень даже логично, время ты берешь откуда?

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

>Чтоб вкурить в нее (функциональщину) надо понять λ-исчисление для чего лично мне надо вспомнить весь курс высщей математики, а это давно было между прочим.

Даже лямбда исчисление по большей части не нужно. Умения программировать на хаскеле несколько пересекутся с лямбда исчислением, но не более. Так же, как и знать теорию категорий совершенно необязательно, что-бы успешно и с толком использовать монады. А остальная математика там и вовсе не понадобится(арифметику и логику на интуитивном уровне принимаем за изученную по умолчанию)

А синтаксис Хаскеля не так уж и плох (он хотя бы есть).

Для функционального языка наверное…

Он вообще достаточно хороший. Что именно не нравится?

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

> Лично меня пугает то что ты на нем не смог функцию time() реализовать.

Что за time()? Можно поподробнее для анабиозников?

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

> Хаскель разрабатывается в MS Research, по большей части, насколько я знаю

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

Уясните пожалуйста разницу между MS и MS Research.

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

> Ох, да. Курс ВЫШЕЙ МАТИМАТИКЕ, лол. Без интегралов не обойтись.

Какой тупой анонимус, он даже не понял разницу между матаном и мат логикой >_<

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

> IMHO у этого язычка только 2 функции: 1. Защита кандитатских и докторских;

Покажешь хотя бы пару российских докторских, связанных с ним?

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

> И если да - для каких целей он в основном используется?

Как и все языки — для выражения мыслей в письменной форме :)

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

>потому что у тебя ИГМ (императив головного мозга)

Ну такая вещь как время это важно на самом деле.

функция в математическом смысле на одинаковых аргументах должна возвращать одинаковые значения, а time() или random() так не делают, поэтому они связаны с IO,

Свойства последовательности изымаемой из random() не зависят от того в какой последовательности и как часто берутся оттуда данные. Можно принять что случайная последовательность задана наперед в виде бесконечного массива с белым шумом. В этом смысле random() удовлетворяет контракту генератора как и другие IO-абстракции, а time() - нет.

Absurd ★★★
()

Синтаксис у хаскеля в принципе не сложный. Если посчитать «неочиведности» си-подобного синтаксиса, я бы сказал, что паритет.

А по поводу функциональщины — она ещё заразнее, чем императивщина. После хаскелей не хочется делать циклы, только фолды да мапы подавай

А ещё в хаскелях система типов крутая, после них то, что в си, жабе или пейтоне — детский лепет

ubuntulover
()
Ответ на: комментарий от Absurd

Лично меня пугает то что ты на нем не смог функцию time() реализовать

пусть тебя не пугает моё невежество :) haskell тут не при чём

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

а time() - нет

это ещё почему? random() берёт данные от генератора псевдослучайных чисел, time() - от часов. ни тот, ни другой, не являются чистой функцией

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

> это ещё почему? random() берёт данные от генератора псевдослучайных чисел, time() - от часов. ни тот, ни другой, не являются чистой функцией

Ну типа ИО заразителен (как ГПЛ), но всё-таки правильно было бы реализовать такую функцию частично чистой... Нопремер:

let random seed, где сид - некое число (int -> int) let time (void -> int)

Так вот, ежели random 100 — то она чистая. Ежели random time - то уже нет. Так что ли? Или в хаскелях нельзя там число подставить? В теории такая «половинчатая» функция может быть или надо обязательно аргумент заворачивать в ИО, чтобы принимать ИО (IO int -> int)? Уже не помню, давно игрался.

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

>это ещё почему? random() берёт данные от генератора псевдослучайных чисел, time() - от часов. ни тот, ни другой, не являются чистой функцией

random() равно как и файлы можно представить чисто в виде функций заданных табличным способом. random() можно еще через линейный конгруэнтный метод или неприводимый многочлен на поле Галуа задать чисто математически. А time() это именно состояние, причем волатильное.

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

>Далее — С. Что это за звездочки? Умножение? Нет? Что еще за указатели?! Потом разобрался.

Далее — Java. Private? Public? Как много странных слов! Потом и это освоил.

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



Поздравляю. В итоге ты не осилил ни один язык, который изучал, в противном случае ты бы остановился либо на С, либо на Java. И там и там, хорошим программистам платят некислые деньги. А ты подался в Haskell =)

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

random() равно как и файлы можно представить чисто в виде функций заданных табличным способом

это ещё с какой радости? от того, как ты их задашь, функциями они не станут

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

ежели random 100 — то она чистая

нет. seed взводит генератор, к возвращаемому значению прямого отношения не имеет: само значение всё равно надо брать из IO

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

> Был бы он F# «пропиетарным» мы бы про него не узнали. :)

F# (компилятор) вполне пропиетарен. Почитайте лицензию.

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

>jtootf

jtootf вылез из уютненького Development? :) удивительно.

по сабжу: хорошо, что язык развивается, может быть с подачей MS станет популярным.

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

jtootf вылез из уютненького Development? :) удивительно.

и ничего удивительного. во всяком случае, такую новость я не мог пропустить :)

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

Высшей математикой обычно как раз матан и называют

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

но что можно называть высшей математикой в общем - я не понимаю

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

>> ежели random 100 — то она чистая

нет. seed взводит генератор, к возвращаемому значению прямого отношения не имеет: само значение всё равно надо брать из IO

Не, я чисто теоретически: что было бы с чистотой функции, если бы random мог принимал какой-угодно seed. Короче говоря, если с виду чистая функция может принимать аргумент, вычисленный нечистой функций, то такая функция ведь тоже становится нечистой?

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

если с виду чистая функция может принимать аргумент, вычисленный нечистой функций, то такая функция ведь тоже становится нечистой

композиция таких функций становится нечистой

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

> функция может принимать аргумент, вычисленный нечистой функций

никак не может быть

с виду чистая

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

> Имеет ли смысл сейчас изучать этот язык?

Имеет, хотя бы просто в образовательных целях (так же, как, например, Пролог и Форт). Но не обязательно тратить на это по 4-6 часов в день.

summer
() автор топика
Ответ на: комментарий от summer

И вот зачем я запостил сюда новость?

ну не ты, так кто-нибудь другой запостил бы :)

Сколько же тут неадекватов...

это ЛОР :) не худшее место, на самом деле

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

>Работают-работают... :) Сделали же они из окамла F#. Вот можд теперь и за хаЦкель решили взяться... :)

да я собственно о том же )

k0l0b0k ★★
()

Вот вы тут о каких-то лямбдах с хаскелями рассуждаете. а я на днях видел код одного очень популярного и платного CMS на пхп, где используются такие прекрасные выражения как $a <> $b (у меня нет машины времени - сейчас 2009 год).

А ещё они наличие переменной проверяют по strlen. А зато денег получают вполне прилично.

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

Имеет ли смысл сейчас изучать этот язык? И если да - для каких целей он в основном используется?

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

Deleted
()
Ответ на: комментарий от anonymous_incognito

А странного здесь ничего нет. Один из мелкософтных разработчиков haskell сказал, что haskell для них представляет лишь экспериментальную платформу для отработки различных фичь, которые затем могут войти в другие языки.

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

> А time() это именно состояние, причем волатильное.

Ты сам себе ответил. Здесь побочный эффект. Чистая же функция возвращает всегда одно и тоже значение для тех же самых аргументов. Отсюда, кстати, следуют ленивые вычисления, referencial transparency и прочие умные слова.

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

> Какой тупой sv75, не заметил иронии.

Он не тупой. Просто Вы имели неосторожность посягнуть на его святыню... Угнать, так сказать, его «священную корову»... :))) И оптравить её на колбасу-тушёнку всякую... Ай-яй-яй... Вам бы всё жрать, а он, знаете ли, на неё молится... :)))

Впрочем, пошёл-ка я отсюда... Со своей иронией, да и Вам не рекомендую здесь задерживаться. Ибо сейчас поналетят прозелиты нового и чистого с функциональным и устроют нам тут небо с овчинку... :)))

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

> технарь детектид.

А это плохо? Всё... молчу-молчу-молчу... :)))

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

А решается это тем, что и random() и time() должны возвращать не конкретные вычисленные значения, а сами вычисления (computations), которые обычно представляются в виде функций, генерируемых компилятором на основе программы (нотация do). Затем, чтобы получить реальные значения мы просто вызываем уже эти новые функции (через runXXX), передавая нужные параметры. Или передаем сами функции как параметры другим внешним функциям (через liftIO). В общем, приходим к монадам, выражая побочный эффект с помощью только чистых функций! В этом есть какая-то завораживающая магия :)

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

> И вот зачем я запостил сюда новость? Сколько же тут неадекватов...

summer, право, не обращайте на нас внимания... Нам бы поржать... А то пинать тушку С# уже надоело... :))) А Вы нам свежатинки подкинули... :))) Премного благодарны... :))) В перерывах между программированием на С и прочими невинными развлечениями типа «зарабатывания денег», оно самое то... :)))

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

> только больной человек мог придумать синтаксис в котором пробелы имеют значение!

Это вы еще Whitespace не видели))

EvilBlueBeaver
()
Ответ на: комментарий от Waterlaz

> ЗЫ и питон даже хвостовую рекурсию не оптимизирует и многострочные лямбды не поддерживает. Трудно его назвать функциональным.

ЗЫ и питон даже иммутабельность не обеспечивает. Трудно его назвать функциональным. fixed

ЗЗЫ Многострочные лямбы не нужны и заменяются nested-функциями. А вот tail-recursion надо да. Видел костыльный декоратор, который «какбы» делал хвостовую рекурсию. На самом деле он перехватывал переполнение стека и перезапускал по новой. ))

EvilBlueBeaver
()
Ответ на: комментарий от Vudod

> Просто он теоретик — высшая каста, тебе за ним не угнаться — весь в полёте мысли.

в теоретики обычно идут те кто на практике из себя ничего не представляет

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