Как стать автором
Поиск
Написать публикацию
Обновить
3.1

Haskell *

Чистый функциональный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Первый высокоуровневый язык программирования для квантовых компьютеров

Время на прочтение2 мин
Количество просмотров78K
Хотя квантовые компьютеры существуют пока только в теории, но это не мешает делать обоснованные предположения об их будущей архитектуре и, что более важно, об интерфейсе взаимодействия с ними. Таким образом, уже сейчас есть возможность проектировать программные симуляторы квантовых компьютеров — и писать софт.

Группа американских учёных, получив финансирование от исследовательского центра Национальной разведки США (IARPA) разработала высокоуровневый язык программирования Quipper. Он создан на основе Haskell и лучше подходит для реализации квантовых алгоритмов, чем QCL (основан на C).

На сегодняшний день известно как минимум 45 алгоритмов для квантовых компьютеров. Все они описаны в научных статьях, но ни один не был реализован в программном коде. С появлением Quipper появилась такая возможность. В дальнейшем программисты смогут просто использовать готовые библиотеки для квантовых компьютеров, как они это делают сейчас на высокоуровневых языках для классической архитектуры.
Читать дальше →

Happstack Lite: Веб-фреймворк на Хаскеле

Время на прочтение9 мин
Количество просмотров14K
image
Картинка для привлечения внимания, clckwrks — веб-фреймворк, тесно связанный с Happstack.

Happstack — веб-фреймворк с большими возможностями и богатым API, который развивался на протяжении последних семи лет, чтобы соответствовать нуждам повседневной веб-разработки. К сожалению, богатый и гибкий API может быть бесполезным и запутывающим, когда вам нужно что-то простое. Однако многие и не догадываются, что под крылом Happstack кроется очень элегантный и простой в использовании веб-фреймворк Happstack Lite.

Читать дальше →

Тройка полезных монад

Время на прочтение4 мин
Количество просмотров48K
Внимание: перед тем как читать текст ниже, вы уже должны иметь представление о том, что такое монады. Если это не так, то прежде прочитайте вот этот пост!

Перед нами функция half:


И мы можем применить её несколько раз:
half . half $ 8
=> 2


Всё работает как и ожидалось. Но вот вы решили, что хорошо бы иметь лог того, что происходит с этой функцией:


half x = (x `div` 2, "Я только что располовинил  " ++ (show x) ++ "!")


Что ж, отлично. Но что будет если вы теперь захотите применить half несколько раз?
half . half $ 8


Вот то, что мы хотели бы, чтобы происходило:


Спойлер: автоматически так не сделается. Придётся всё расписывать ручками:
finalValue = (val2, log1 ++ log2)
    where (val1, log1) = half 8
          (val2, log2) = half val1


Фу! Это ни капли не похоже на лаконичное
half . half $ 8


А что, если у вас есть ещё функции, имеющие лог? Напрашивается такая схема: для каждой функции, возвращающей вместе со значением лог, мы бы хотели объединять эти логи. Это побочный эффект, а никто не силён в побочных эффектах так, как монады!
Читать дальше →

Yesod = Haskell $ Web

Время на прочтение5 мин
Количество просмотров23K
Haskell — пока еще единственный язык программирования, в котором есть оператор «фтопку» (>>=)

Абсурдопедия


Планировал начать с описания того, как ошибаются люди, полагающие Haskell бесполезным с практической точки зрения, сферическим языком в вакууме и т.д. Но, боюсь, за меня все уже сделали авторы Real World Haskell. Была идея рассказать о том, насколько красив и могуч этот язык программирования — но подвел тяжелый слог и неумение придумать захватывающий сюжет с неожиданной развязкой. Поэтому отброшу все лишнее и расскажу о своих злоключениях веб-разработки на Haskell.
Читать дальше →

Функторы, аппликативные функторы и монады в картинках

Время на прочтение5 мин
Количество просмотров195K
Вот некое простое значение:


И мы знаем, как к нему можно применить функцию:


Элементарно. Так что теперь усложним задание — пусть наше значение имеет контекст. Пока что вы можете думать о контексте просто как о ящике, куда можно положить значение:


Теперь, когда вы примените функцию к этому значению, результаты вы будете получать разные — в зависимости от контекста. Это основная идея, на которой базируются функторы, аппликативные функторы, монады, стрелки и т.п. Тип данных Maybe определяет два связанных контекста:


data Maybe a = Nothing | Just a

Позже мы увидим разницу в поведении функции для Just a против Nothing. Но сначала поговорим о функторах!
Читать дальше →

Священный грааль динамической диспетчеризации

Время на прочтение4 мин
Количество просмотров8.7K
Большой бедой Узким местом статической типизации являются гетерогенные коллекции и вариадические функции. Поэтому в RPC-библиотеках часто встречается подход, когда входящие данные так и лежат одним ADT-куском, а для методов один такой же плоский тип "[Foo] -> IO Foo", реализации которого копипастят десериализацию/сериализацию, что неудобно и плодит ошибки, в т.ч. рантаймовые.

Решение этой задачи меня беспокоило практически с самого начала практического применения мной хаскеля и, наконец, вчера ночью на меня снизошло вдохновение аж в 6.5 миллиолега и после сеанса гадания на ошибках и беседы с ghci у меня всё получилось.



Читать дальше →

Hakyll для начинающих

Время на прочтение4 мин
Количество просмотров11K
Однажды вы, как и я какое-то время назад, решаете создать свою персональную страничку с блогом (ну или без). Существует множество способов достигнуть задуманного, в зависимости от вашего опыта программирования, уровня лени ну и степени гикнутости. Но лично мне кажется, что заводить хостинг и домен и создавать серьезный “взрослый” сайт просто чтобы показать себя как-то слишком избыточно. Потому для достижения данной цели вы можете пойти более простым путем — сделать статический сайт.

Статические сайты быстрые, безопасные, легкие в публикации и могут управляться через систему контроля версий. Jasper Van der Jeugt


Я надеюсь, что не нужно приводить доказательства сказанному Йеспером, так как все и так достаточно понятно.

В тот день, когда я принял решение сделать свою персональную страничку, я обнаружил что возможно разместить оную на github. Для публикации будет достаточно вызвать git push -u origin master из своего репозитория, так что все должно быть достаточно просто. Но для начала, нам нужно найти какой-нибудь builder статических сайтов, чтобы с его помощью одни раз все настроить, запушать и затем время от времени добавлять свои новые посты, информацию о проектах, ну и что бы вам там хотелось. Настроить популярнейшее решение Jekyll на моей Windows машине оказалось как-то слишком проблематично, потому немного полазив в интернете я нашел замечательную альтернативу — Hakyll. А так как у меня давно уже чесались руки попробовать что-нибудь сделать на Хаскелле я решил что стоит попробовать. Если вам интересно последовать по моим стопам, добро пожаловать.

Читать дальше →

Принципы быстрого Хаскеля под GHC

Время на прочтение4 мин
Количество просмотров11K
GHC (Glasgow Haskell Compiler) — стандартный компилятор Хаскеля. GHC — один из самых крутых компиляторов в мире, но к сожалению без дополнительных телодвижений скомпилированные им программы по скорости больше напоминают интерпретируемые, т. е. работают очень медленно. Однако если раскрыть весь потенциал компилятора, Хаскель приближается по производительности к аналогичному коду на C.

В этой статье я обобщаю опыт выжимания максимума из GHC при создании dataflow-фреймворка Yarr.
Читать дальше →

Yarr — dataflow-фреймворк (обработки изображений) на Хаскеле

Время на прочтение7 мин
Количество просмотров9.7K


Зондирование обстановки на Реддите показало, что едва ли хоть кто-то всерьез занимается обработкой изображений на Хаскеле, несмотря на то, что достаточно популярная библиотека Repa предполагает работу с изображениями как одно из основных приложений. Надеюсь, ситуацию сможет изменить библиотека Yarr (документация, гитхаб).

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

Полиморфия и классы в Haskell

Время на прочтение8 мин
Количество просмотров19K
Здравствуй, дорогой читатель!

Cегодня мы поговорим о полиморфизме функций и о классах в языке Haskell, как их использовать и для чего они нужны. Все мы использовали метод полиморфизма, например, в языке Java. А как это можно применить к Haskell? Haskell не является объектно-ориентированным языком, но в нём всё же присутствуют классы. Хотя классы в Haskell и имеют некоторые свойства классов объектно-ориентированных языков, они более абстрагированы и от этого намного мощнее. Проводя аналогию с языком Java дальше, классы в Haskell являются ничем другим как интерфейсы — в класс записываются лишь декларации функций, а сами реализации этих функций будут сделаны позже.
Хочется выразить благодарность пользователю Darkus за прочтение и исправление всех недочётов и неточностей в статье, а также за дельные советы и помощь в написании.
Читать дальше →

Решение турнирных задач на языке Haskell

Время на прочтение3 мин
Количество просмотров9.3K
Доброго времени суток всем хабражителям
Перед вами статья, посвященная довольно известному, но не сильно популярному языку Haskell. В ней мне хочется показать пример решения простой турнирной задачи на языке Haskell. Надеюсь, что эта статья поможет начинающим программистам на Хаскеле сделать первые шаги к написанию полноценной программы.

Читать дальше →

Играем в Haskell

Время на прочтение10 мин
Количество просмотров61K


Я замечательно провел время изучая Haskell в последние месяцы, и мне кажется, что сделать первые шаги в этом занятии сложнее, чем это могло бы быть на самом деле. Мне повезло работать в нужное время и в нужном месте, и в Facebook я прошел курс по Haskell от Bryan O'Sullivan, но Вы определенно сможете влиться в тему и без чужой помощи. Для этого можно поиграть в Haskell на сайте Try Haskell, а в конечном счете установить себе GHC.
Читать дальше →

Ближайшие события

Принцип «Разделяй и властвуй», а также бесконечные потоки в Haskell

Время на прочтение5 мин
Количество просмотров15K
Приветствую всех читателей!
Ниже идет моя точка зрения того, как я понял главу 14 из слайдов курса по Haskell у нас в университете.
Итак, сегодня мы поговорим о следующих двух темах:
  • Принцип «Разделяй и властвуй»
  • Работа с бесконеными потоками

Экспертов в этой области прошу комментировать и поправлять, если будут неточности. Буду рад ответить на вопросы в комментариях.
Читать дальше →

Simon Marlow уходит из Microsoft Research в Facebook

Время на прочтение1 мин
Количество просмотров9.3K
Сегодня в почтовой рассылке Simon Marlow объявил о том, что он уходит из MIcrosoft Research.

«Я планирую взять небольшой перерыв и завершить мою книгу о многопоточном и параллельном программировании на Haskell для издательства O'Relly, а затем начать работу в британском офисе Facebook в марте 2013 года» — пишет он.

Simon Marlow — один из создателей языка Haskell и один из ведущих разработчиков единственного наиболее популярного компилятора, GHC.
Читать дальше →

Две простенькие задачи на Haskell (для начинающих)

Время на прочтение5 мин
Количество просмотров18K
Приветствую всех пользователей Хабрахабр!
Я недавно начал изучать Haskell, и, немного освоив его, решил поделиться небольшим накопленным опытом. Конечно же, знания Haskell у меня не на таком уровне как у Darkus, поэтому две задачи, которые описаны ниже, ориентированны больше на новичков, но опытные пользователи возможно и поправят, и подскажут как лучше сделать. Эта не только моя первая статья на Хабрахабр, но и вообще мой первый туториал, который я когда-либо писал.
Читать дальше →

SublimeHaskell

Время на прочтение2 мин
Количество просмотров13K
В рамках знакомства с плагинами Sublime Text 2, добавил в SublimeHaskell несколько новых возможностей и багфиксов. Автор пока занят, поэтому pull request в подвешенном состоянии, забрать можно на гитхабе.


Читать дальше →

Ленивый hGetContents. Баг или фича? (Haskell)

Время на прочтение4 мин
Количество просмотров3.4K
Меня давно беспокоит одна тема. Вот решил высказаться и услышать, что думают люди по этому поводу. Речь пойдет о функции hGetContents. Если вы когда-нибудь работали с файлами, то вы знаете, что эта функция возвращает содержимое файла (потока). Вот типичный пример использования этой функции.
import System.IO

main = do 
	file <- openFile "1.txt" ReadMode
	content <- hGetContents file
	print content
	hClose file
-- результат: выводит содержимое файла на экран

Читать дальше →

Через тернии к Haskell (перевод). 2/2

Время на прочтение18 мин
Количество просмотров46K
Только хардкор, только монады

Через тернии к Haskell. 1/2

Время на прочтение25 мин
Количество просмотров234K


Первая часть короткого и жесткого введения в Haskell. Вторую часть можно найти здесь

tl;dr: Очень краткое и сжатое введение в Haskell.


UPD. Если туториал вам понравился, черкните пару строк автору оригинальной статьи. Человеку будет приятно ;)
Классные картинки, много текста и вынос мозга

Вклад авторов