Рубрика «haskell» - 9

Какие языки программирования популярны поздно вечером - 1

Stack Overflow опубликовал очередную подборку интересной статистики о языках программирования и привычках разработчиков. На этот раз они соотнесли статистику визитов на сайт по времени суток и языковые теги вопросов по этим визитам. Получилась интересная картина. Оказывается, некоторые языки более популярны в рабочее время (например, C# и JavaScript), а у других доля заметно растёт вечером (С, Python). Как будто программисты вечером возвращаются домой и занимаются, наконец, любимым делом.
Читать полностью »

Онлайн-курсы весеннего семестра от Академического университета и CS центра - 1 Коллекция онлайн-курсов, подготовленных преподавателями Академического университета (СПбАУ РАН) и Computer Science Center, насчитывает уже почти 20 бесплатных курсов по программированию и математике.

Все онлайн-курсы разработаны на платформе Stepik.org, их может проходить любой желающий. Количество курсов продолжает расти, и этой весной запускаются несколько новинок:

  • Алгоритмы: теория и практика. Структуры данных (А. С. Куликов)
  • Операционные системы (М.Ю. Кринкин)
  • Функциональное программирование на языке Haskell (часть 2) (Д. Н. Москвин)

Читать полностью »

image

В течение полугода я программировал преимущественно на Go. И я разочарован. По двум причинам:

  • В Go особенно трудно придерживаться функциональной парадигмы. По сути, язык препятствует функциональному программированию. Меня это разочаровало, потому что в императивном коде, который я пишу, большое количество шаблонных кусков. К тому же, как мне кажется, в этом случае выше риск ошибок, в отличие от использования функциональных абстракций.
  • Я считаю, что Go упускает свои шансы. В программных языках появились замечательные нововведения (особенно в сфере проверки и вывода типов — type inference), делающие код безопаснее, быстрее и чище. Мне хотелось бы, чтобы Google использовала своё влияние, чтобы поддержать некоторые из этих идей.

Я не первый, кто воспринимает Go подобным образом. Вот публикации других людей, разделяющих мои впечатления:

Ниже я добавлю свои соображения. Чтобы показать, как именно можно улучшить Go, я буду сравнивать его с Rust.

Читать полностью »

Пишу как хочу, или Все на встречу с ruHaskell в «Лаборатории Касперского» - 1

6 апреля 2017 «Лаборатория Касперского» и сообщество RuHaskell вновь будут рады видеть всех, кто считает Haskell лучшим языком на свете. На этой второй по счету встрече (на первой прошлогодней мы тоже говорили о магии типов Haskell и сравнивали его с C++) обсудим наш язык и его “коллег по цеху” в функциональной парадигме, поделимся опытом применения в решении прикладных задач бизнеса, поднимем наболевшие вопросы и наконец, просто пообщаемся.

В программе — много полезного и ценного: если коротко, то узнаем как применять Haskell там, где его пока не используют — для GUI на десктопе и в браузере, как альтернативу базе данных, как «клей» для внешних сервисов, — и почему это хорошо и правильно. А если подробно, то вас ждут следующие доклады:
Читать полностью »

Haskell: об одном методе реализации функций с переменным числом параметров - 1

– А видела ты Черепаху «Как бы»?
– Нет, – сказала Алиса. – Я даже не знаю, кто это такой.
– Как же, – сказала Королева. – Это то, из чего делают «Как бы черепаший суп».

                  Льюис Кэрролл, 
                           «Алиса в Стране чудес»

— Судя по твоим речам, ты хорошо знаешь Фангорн? — спросил в ответ Арагорн.
— Какое там! — отозвался старик. — На это ста жизней не хватит. Но я сюда иной раз захаживаю.

                 Джон Р. Р. Толкиен, 
                          «Властелин Колец» — к слову о моём знании Haskell ;)

Homines dum docent, discunt. (Объясни другим — сам поймёшь.)

                 народная латинская поговорка

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

Казалось бы о каком переменном числе параметров может идти речь при таком раскладе? Однако поразмыслив, посмотрев исходники printf или просто почитав wiki.haskell становится очевидным, что как раз ФП даёт ключ к достаточно красивому, хотя и несколько «казуистическому» решению этой задачи.

В настоящей публикации я рассмотрю один из способов реализации такого механизма на простых примерах, а также предложу некоторое обобщённое решение на базе Template Haskell, для превращения семейства обычных функций с последним параметром типа список в функцию с «как бы с переменным числом параметром» (далее по тексту просто «с переменным числом параметром»).
Читать полностью »

Что общего у нормального распределения, конечных автоматов, хеш-таблиц, произвольных предикатов, строк, выпуклых оболочек, афинных преобразований, файлов конфигураций и стилей CSS? А что объединяет целые числа, типы в Haskell, произвольные графы, альтернативные функторы, матрицы, регулярные выражения и статистические выборки? Наконец, можно ли как-то связать между собой булеву алгебру, электрические цепи, прямоугольные таблицы, теплоизоляцию труб или зданий и изображения на плоскости? На эти вопросы есть два важных ответа: 1) со всеми этими объектами работают программисты, 2) эти объекты имеют сходную алгебраическую структуру: первые являются моноидами, вторые — полукольцами, третьи — алгебрами де Моргана.

Читать полностью »

Часть 1. Функциональная

Эта статья (если быть до конца честным — набор заметок) посвящена ошибкам, которые совершают новички, ступая на путь Scala: не только джуниоры, но и умудренные опытом программисты с сединами в бороде. Многие из них до этого всегда работали лишь с императивными языками такими как C, C++ или Java, поэтому идиомы Scala оказываются для них непонятными и, более того, неочевидными. Поэтому я взял на себя смелость предостеречь новообращённых и рассказать им об их типичных ошибках — как совсем невинных, так и тех, что в мире Scala караются смертью.

Читать полностью »

в 9:59, , рубрики: haskell

Магия newtype в Haskell - 1

Основной способ задать новый тип данных в Haskell — это использование конструкции data. Однако, есть ещё и newtype. Практикующие программисты Haskell пользуются конструкцией newtype постоянно, популярный линтер hlint предлагает заменять data на newtype если это возможно.

Но почему?

Читать полностью »

Еще одно введение в монады для совсем совсем начинающих.

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

Написание кода на Haskell похоже на игру, в которой вы должны преобразовать объекты к нужному типу. Поэтому вам в первую очередь нужно понять правила этой игры. При написании кода вы должны четко понимать, какой тип имеет каждый конкретный кусок кода.

С обычными функциями все понятно. Если имеется функция типа «a->b», то подставив в неё аргумент типа «a», вы получите результат типа «b».

С монадами все не так очевидно. Под катом подробно расписано, как работать с do-конструкцией, как последовательно преобразуются типы, и зачем нужны монадные трансформеры.

Читать полностью »

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

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js