<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Результаты поиска по запросу «[haskell]»]]></title>
    <link>https://habr.com/ru/</link>
    <description><![CDATA[Результаты поиска по запросу «[haskell]»]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Tue, 09 Jun 2026 18:17:05 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      
        
    

  

  

	
	<item>
		<title><![CDATA[Открыта регистрация участников на Международную конференцию по функциональному программированию]]></title>
    <guid isPermaLink="true">https://habr.com/ru/news/511030/</guid>
		<link>https://habr.com/ru/news/511030/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=511030</link>
		<description><![CDATA[<p><img src="https://habrastorage.org/webt/wx/rt/yy/wxrtyynfqyge5cyalxdnsmmdmwc.png"></p><br>
<p>ICFP 2020 — двадцать пятая конференция под эгидой ACM SIGPLAN. В этом году конференция будет проводиться онлайн, и все события, проходящие в её рамках, будут онлайн.</p><br>
<p><a href="https://icfpcontest2020.github.io/" rel="nofollow">Соревнование ICFP по программированию</a> будет проводиться с 17 июля по 20 июля 2020 года (то есть, уже через два дня). </p><br>
<p>Сама конференция будет проходить с 24 по 26 августа 2020, и укладываться в два тайм-слота. Первый слот будет проходить с 9:00 до 17:30 по времени Нью-Йорка, и будет включать как технические, так и социальные мероприятия. Второй тайм-слот будет проходить с 9:00 до 17:30 по Пекинскому времени, на следующий день, и будет с незначительными вариациями повторять содержимое предыдущего дня, включая технические и социальные мероприятия.</p> <a href="https://habr.com/ru/articles/511030/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Wed, 15 Jul 2020 08:12:02 GMT</pubDate>
    <dc:creator><![CDATA[lockywolf]]></dc:creator>
		<category><![CDATA[Erlang/OTP]]></category><category><![CDATA[Haskell]]></category><category><![CDATA[Lisp]]></category><category><![CDATA[Конференции]]></category><category><![CDATA[Функциональное программирование]]></category>
		<category><![CDATA[haskell]]></category><category><![CDATA[erlang]]></category><category><![CDATA[scheme]]></category><category><![CDATA[lisp]]></category><category><![CDATA[minikanren]]></category><category><![CDATA[конференции]]></category><category><![CDATA[функциональное программирование]]></category><category><![CDATA[ml]]></category>
	</item>
	
  

  

  

    
    <item>
      <title><![CDATA[Вычисляем определитель матрицы на Хаскелле]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/517422/</guid>
      <link>https://habr.com/ru/articles/517422/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=517422</link>
      <description><![CDATA[Решил выложить код вычисления определителей. Код рабочий, хотя и не претендует на виртуозность. Просто было интересно решить эту задачу именно на Хаскелле. Рассмотрены два подхода к решению задачи: простая рекурсия и метод Гаусса.<br>
<br>
<h4>Немного теории</h4><br>
Как известно, определитель квадратной матрицы <b>n*n</b> — это сумма <b>n!</b> слагаемых, каждое из которых есть произведение, содержащее ровно по одному элементу матрицы из каждого столбца и ровно по одному из каждой строки. Знак очередного произведения: <br>
<p></p><p><math><img src="https://habrastorage.org/getpro/habr/formulas/66b/6d2/36a/66b6d236a771b37a0419d52eec93408f.svg" alt="${a}_{1,i1}*{a}_{2,i2}*...{a}_{n,in}$" data-tex="display"></math></p><br>
определяется чётностью подстановки:<br>
<p></p><p><math><img src="https://habrastorage.org/getpro/habr/formulas/040/6ba/fae/0406bafaeba2534c63f9726831c5e31d.svg" alt="$\begin{pmatrix}1 &amp; 2 &amp; ... &amp; n \\ {i}_{1} &amp; {i}_{2} &amp; ... &amp; {i}_{n} \end{pmatrix}$" data-tex="display"></math></p><br> <a href="https://habr.com/ru/articles/517422/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=517422#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Wed, 02 Sep 2020 07:53:05 GMT</pubDate>
      <dc:creator><![CDATA[catstail1954]]></dc:creator>
      <category><![CDATA[Haskell]]></category><category><![CDATA[Функциональное программирование]]></category>
      <category><![CDATA[Haskell]]></category><category><![CDATA[Gauss]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Haskell]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/22742/</guid>
      <link>https://habr.com/ru/articles/22742/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=22742</link>
      <description><![CDATA[Вот существует такая категория людей — любители программировать на Haskell. И всё с ними хорошо и замечательно, но мучает меня такое обстятельство, что я совершенно их не понимаю :).<br/>
<br/>
То есть да, Haskell, монады, всё круто, сложно, разминка для мозгов, куча неявных правил и ленивых вычислений. Можно мерятся пузами в искусстве писать стрелочки и bind'ы. И так далее. Но вот от чего уши встают дыбом? Так это от того, что эти люди неожиданно начинают заявлять, что все их программки в одну строчку делаются исключительно средствами языка. Вот что тут странно. Куда пропадает из этого рассуждения мысль о том, что этот самый Haskell требует нешуточного такого runtime для своей работы: ядро Linux, например, плюс ещё сверху процедуры развёртки/свёртки lambda-графов, не считая, сборщика мусора.<br/>
<br/>
Конечно, естественно, когда у вас есть ядро Linux, Apache, runtime и монада IO, наполовину написанная на Си, то web-приложение на Haskell можно написать в три строчки.<br/>
<br/>
Но можно ли его считать написанным исключительно на Haskell? Неужели Haskell настолько развивает абстрактное мышление, что высококлассные программисты на нём забывают о таких 'мелочах', как остальная экосистема?<br/>
<br/>
Вот этого я не понимаю… Хм. Или я не понимаю чего-то другого? Того же великого Дао, скрытого за этими самыми монадами и оператором bind? Или там понимать нечего и всё является чистой воды выпендрёжем?<br/>
<br/>
Эх. Проблема в том, что мы живём в век дезинформации, мнений авторитетов и сверхспециализации. <a href="https://habr.com/ru/articles/22742/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=22742#habracut"></a>]]></description>
      
      <pubDate>Tue, 01 Apr 2008 18:31:30 GMT</pubDate>
      <dc:creator><![CDATA[mikhanoid]]></dc:creator>
      <category><![CDATA[Чулан]]></category>
      <category><![CDATA[haskell]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Способны ли Вы вести разработку на экзотических языках типа Haskell или Erlang?]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/36942/</guid>
      <link>https://habr.com/ru/articles/36942/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=36942</link>
      <description><![CDATA[&nbsp; <a href="https://habr.com/ru/articles/36942/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=36942#habracut"></a>]]></description>
      
      <pubDate>Thu, 14 Aug 2008 07:36:55 GMT</pubDate>
      <dc:creator><![CDATA[steck]]></dc:creator>
      <category><![CDATA[Чулан]]></category>
      <category><![CDATA[Haskell]]></category><category><![CDATA[Erlang]]></category><category><![CDATA[вопрос]]></category><category><![CDATA[Разработка]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Интервью с Саймоном Пейтоном-Джонсом, одним из создателей языка Haskell]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/65274/</guid>
      <link>https://habr.com/ru/articles/65274/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=65274</link>
      <description><![CDATA[Во время недавнего визите в Москву <a href="http://en.wikipedia.org/wiki/Simon_Peyton-Jones">Саймона Пейтона-Джонса</a>, одного из создателей языка <a href="http://en.wikipedia.org/wiki/Haskell_(programming_language)">Haskell</a>, мне удалось взять у него <a href="http://rutube.ru/tracks/2166198.html?v=755530003fef79230b71ac821efaed67">небольшое спонтанное видеоинтервью</a>, которое и предлагаю Вашему вниманию.<br/>
<br/>
<video>http://rutube.ru/tracks/2166198.html?v=755530003fef79230b71ac821efaed67</video> <a href="https://habr.com/ru/articles/65274/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=65274#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 24 Jul 2009 04:01:09 GMT</pubDate>
      <dc:creator><![CDATA[shwars]]></dc:creator>
      <category><![CDATA[Haskell]]></category>
      <category><![CDATA[функциональное программирование]]></category><category><![CDATA[Haskell]]></category><category><![CDATA[интервью]]></category><category><![CDATA[наука]]></category><category><![CDATA[публикации]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Введение в Template Haskell. Часть 1. Необходимый минимум]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/131998/</guid>
      <link>https://habr.com/ru/articles/131998/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=131998</link>
      <description><![CDATA[<p><i>Данный текст является переводом <a href="http://docs.google.com/uc?id=0B4BgTwf_ng_TM2MxZjJjZjctMTQ0OS00YzcwLWE5N2QtMDI0YzE4NGUwZDM3">документации Template Haskell</a>, написанной Булатом Зиганшиным. Перевод всего текста разбит на несколько логических частей для облегчения восприятия. Далее курсив в тексте — примечания переводчика.</i></p><br>
<br>
<a href="http://www.haskell.org/haskellwiki/Template_Haskell">Template Haskell</a> (далее TH) — это расширение языка Haskell предназначенное для мета-программирования. Оно даёт возможность алгоритмического построения программы на стадии компиляции. Это позволяет разработчику использовать различные техники программирования, не доступные в самом Haskell’е, такие как, макро-подобные расширения, направляемые пользователем оптимизации (например inlining), обобщённое программирование (polytypic programming), генерация вспомогательных структур данных и функций из имеющихся. К примеру, код<br>
<pre><code class="bash">yell file line = fail ($(printf "Error in file %s line %d") file line)</code></pre><br>
может быть преобразован с помощью TH в<pre><code class="bash">yell file line = fail ((\x1 x2 -&gt; "Error in file "++x1++" line "++show x2) file line)</code></pre><br>
Другой пример, код<br>
<pre><code class="bash">
data T = A Int String | B Integer | C
$(deriveShow ''T)
</code></pre><br>
может быть преобразован в<pre><code class="bash">
data T = A Int String | B Integer | C
instance Show T
    show (A x1 x2) = "A "++show x1++" "++show x2
    show (B x1)    = "B "++show x1
    show C         = "C"
</code></pre><br>
В TH код на Haskell’е генерируется обычными Haskell’евскими функциями <i>(которые я буду для ясности называть шаблонами)</i>. Минимум того, что вам необходимо знать, чтобы использовать TH — это следующие темы:<br>
<ol>
<li>Как Haskell-код представляется в шаблонах (TH-функциях)</li>
<li>Как монада цитирования используется для унификации имён</li>
<li>Как сгенерированный TH-код вставляется в программу</li>
</ol> <a href="https://habr.com/ru/articles/131998/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=131998#habracut">Читать дальше →</a>]]></description>
      
      <pubDate>Fri, 11 Nov 2011 04:19:27 GMT</pubDate>
      <dc:creator><![CDATA[laughedelic]]></dc:creator>
      <category><![CDATA[Haskell]]></category>
      <category>Haskell</category><category>Template Haskell</category><category>meta-programming</category><category>хаскель</category><category>мета-программирование</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Введение в Template Haskell. Часть 2. Инструменты цитирования кода]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/132679/</guid>
      <link>https://habr.com/ru/articles/132679/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=132679</link>
      <description><![CDATA[<i>Данный текст является переводом <a href="http://docs.google.com/uc?id=0B4BgTwf_ng_TM2MxZjJjZjctMTQ0OS00YzcwLWE5N2QtMDI0YzE4NGUwZDM3">документации Template Haskell</a>, написанной Булатом Зиганшиным. Перевод всего текста разбит на несколько логических частей для облегчения восприятия. Далее курсив в тексте — примечания переводчика. Другие части:</i><br/>
<ul>
<li><a href="http://habrahabr.ru/blogs/Haskell/131998/">Часть 1. Необходимый минимум</a></li>
<li><a href="http://habrahabr.ru/blogs/Haskell/133009/">Часть 3. Прочие аспекты TH</a></li>
</ul><br/>
<br/>
<h2>Монада цитирования</h2><br/>
Поскольку шаблоны должны возвращать свои значения обёрнутыми в монаду <code>Q</code>, для этого имеется набор вспомогательных функций, которые “поднимают” (оборачивают в <code>Q</code>) конструкторы типов <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/template-haskell-2.6.0.0/Language-Haskell-TH-Syntax.html#t:Exp"><code>Exp</code></a>, <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/template-haskell-2.6.0.0/Language-Haskell-TH-Syntax.html#t:Lit"><code>Lit</code></a>, <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/template-haskell-2.6.0.0/Language-Haskell-TH-Syntax.html#t:Pat"><code>Pat</code></a>: <code>lamE</code> (соотв. <code>LamE</code>), <code>varE</code>, <code>appE</code>, <code>varP</code> и т.д. В их сигнатурах так же используются переобозначенные поднятые типы: <code>ExpQ = Q Exp</code>, <code>LitQ = Q Lit</code>, <code>PatQ = Q Pat</code>… (все их можно найти в модуле <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/template-haskell-2.6.0.0/Language-Haskell-TH-Lib.html"><code>Language.Haskell.TH.Lib</code></a>). Используя эти функции, можно значительно сократить код, реже используя do-синтаксис.<br/>
В TH также есть функция <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/template-haskell-2.6.0.0/Language-Haskell-TH-Syntax.html#v:lift"><code>lift</code></a>, которая поднимает до <code>Q Exp</code> значение любого типа из класса <code>Lift</code>.<br/>
В некоторых редких случаях, вам может понадобиться не генерация уникального имени, а использование точного имени идентификатора из внешнего <i>(по отношению к шаблону)</i> кода. Для этих целей есть (чистая) функция <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/template-haskell-2.6.0.0/Language-Haskell-TH-Syntax.html#v:mkName"><code>mkName</code></a> <code>∷ String → Name</code>. Есть также вспомогательная функция <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/template-haskell-2.6.0.0/Language-Haskell-TH-Lib.html#v:dyn"><code>dyn</code></a> <code>s = return (VarE (mkName s))</code>, которая возвращает значение <code>Exp</code> представляющее переменную с данным именем (<code>dyn ∷ String → Q Exp</code>).<br/>
<br/>
<h2>Цитирующие скобки</h2><br/>
Построение значений <code>Exp</code>, представляющих абстрактное синтаксическое дерево — трудоёмкая и скучная работа. Но к счастью, в Template Haskell есть цитирующие скобки, которые преобразуют конкретный Haskell-код в структуру, представляющую его.  <a href="https://habr.com/ru/articles/132679/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=132679#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Tue, 15 Nov 2011 21:20:19 GMT</pubDate>
      <dc:creator><![CDATA[laughedelic]]></dc:creator>
      <category><![CDATA[Haskell]]></category>
      <category>Haskell</category><category>Template Haskell</category><category>meta-programming</category><category>хаскель</category><category>мета-программирование</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Введение в Template Haskell. Часть 3. Прочие аспекты TH]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/133009/</guid>
      <link>https://habr.com/ru/articles/133009/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=133009</link>
      <description><![CDATA[<i>Данный текст является переводом <a href="http://docs.google.com/uc?id=0B4BgTwf_ng_TM2MxZjJjZjctMTQ0OS00YzcwLWE5N2QtMDI0YzE4NGUwZDM3">документации Template Haskell</a>, написанной Булатом Зиганшиным. Перевод всего текста разбит на несколько логических частей для облегчения восприятия. Далее курсив в тексте — примечания переводчика. Предыдущие части:</i><br/>
<ul>
<li><a href="http://habrahabr.ru/blogs/Haskell/131998/">Часть 1. Необходимый минимум</a></li>
<li><a href="http://habrahabr.ru/blogs/Haskell/132679/">Часть 2. Инструменты цитирования кода</a></li>
</ul><br/>
<br/>
<h2>Материализация</h2><br/>
Материализация (reification) — это средство Template Haskell, позволяющее программисту получить информацию из таблицы символов компилятора. Монадическая функция <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/template-haskell-2.6.0.0/Language-Haskell-TH-Syntax.html#v:reify"><code>reify</code></a> <code>∷ Name → Q Info</code> возвращает информацию о данном имени: если это глобальный идентификатор (функция, константа, конструктор) – вы получите его тип, если это тип или класс – вы получите его структуру. Определение типа <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/template-haskell-2.6.0.0/Language-Haskell-TH-Syntax.html#t:Info"><code>Info</code></a> можно найти в модуле <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/template-haskell-2.6.0.0/Language-Haskell-TH-Syntax.html"><code>Language.Haskell.TH.Syntax</code></a>.<br/>
Материализация может быть использована для того, чтобы получить структуру типа, но таким образом нельзя получить тело функции. Если вам нужно материализовать тело функции, то определение функции нужно процитировать и дальше можно будет работать с этим определением с помощью другого шаблона. Например так:<br/>
<pre><code>$(optimize [d| fib = … |])
</code></pre><br/>
или так<br/>
<pre><code>fib = $(optimize [| … |])
</code></pre><br/>
<i>На самом деле, в оригинальной статье больше ничего не говорится про материализацию. Не знаю, насколько это содержательная тема – необходимый минимум знаний о ней ограничивается функцией <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/template-haskell-2.6.0.0/Language-Haskell-TH-Syntax.html#v:reify"><code>reify</code></a> и типом <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/template-haskell-2.6.0.0/Language-Haskell-TH-Syntax.html#t:Info"><code>Info</code></a>, но есть некоторые тонкости, связанные например с тем, что можно получить информацию не о любом имени. Если эта тема интересна, я могу собрать какую-нибудь информацию и написать об этом отдельную заметку (или вклеить сюда).</i><br/>
<br/>
<h2>Облегчённое цитирование имён</h2><br/>
Чтобы получить имя (<code>∷ Name</code>), соответствующее интересующему идентификатору, можно использовать функцию <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/template-haskell-2.6.0.0/Language-Haskell-TH-Syntax.html#v:mkName"><code>mkName</code></a>, но это не безопасное решение, потому что <code>mkName</code> возвращает не квалифицированное имя, которое может интерпретироваться по-разному в зависимости от контекста. А вот код <code>VarE id ← [| foo |]</code> безопасен в этом смысле, так как цитирование квалифицирует имена (получится что-то типа <code>My.Own.Module.foo</code>), но этот код слишком многословный и требует монадический контекст для использования. К счастью, Template Haskell, имеет другую простую форму цитирования имён: <code>'foo</code> (одинарная кавычка перед <code>foo</code>) имеет тип <code>Name</code> и содержит квалифицированное имя, соответствующее идентификатору <code>foo</code>, так что код <code>let id = 'foo</code> эквивалентен по смыслу коду <code>VarE id ← [| foo |]</code>. Обратите внимание, что эта конструкция имеет простой тип <code>Name</code> (а не <code>Q Exp</code> или <code>Q Name</code>), так что она может быть использована там, где не возможно использование монад, например:<br/>
<pre><code>f ∷ Exp → Exp
f (App (Var m) e) |  m == 'map  =  …
</code></pre><br/>
Эта новая форма тем не менее является цитированием и подчиняется тем же правилам, что и цитирующие скобки <code>[| … |]</code>. Например, она не может быть использована внутри этих скобок (так нельзя: <code>[| 'foo |]</code>), <i>но и вклеивание к ней не может быть применено (так тоже нельзя: <code>$( 'foo )</code>), потому что для вклейки нужен тип <code>Q …</code></i>. Более важно то, что эта форма определяется статически, возвращая полностью квалифицированное имя, с однозначной интерпретацией.<br/>
Haskell’евские пространства имён немного всё усложняют. Цитата <code>[| P |]</code> означает конструктор данных <code>P</code>, в то время как <code>[t| P |]</code> означает конструктор типа <code>P</code>. Поэтому для “облегчённого цитирования” необходим такой же способ разделения этих сущностей. Для контекста типов используется просто две одинарные кавычки:<br/>
<ul>
<li><code>'Foo</code> означает “конструктор данных <code>Foo</code> в контексте выражения”</li>
<li><code>'foo</code> означает “имя <code>foo</code> в контексте выражения”</li>
<li><code>''Foo</code> означает “конструктор типа <code>Foo</code> в контексте типов”</li>
<li><code>''foo</code> означает “переменная типа <code>foo</code> в контексте типов”</li>
</ul> Облегчённая форма цитирования используется в примере генерации воплощений класса <code>Show</code>, который разбирается в конце.<br/>
 <a href="https://habr.com/ru/articles/133009/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=133009#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Mon, 21 Nov 2011 09:07:54 GMT</pubDate>
      <dc:creator><![CDATA[laughedelic]]></dc:creator>
      <category><![CDATA[Haskell]]></category>
      <category>Haskell</category><category>Template Haskell</category><category>meta-programming</category><category>хаскель</category><category>мета-программирование</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[WebSocket сервер на Haskell]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/108890/</guid>
      <link>https://habr.com/ru/articles/108890/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=108890</link>
      <description><![CDATA[Как-то раз от нечего делать я решил написать WebSocket сервер, а написав, подумал, что кому-то может оказаться интересным, чем же тут может помочь ленивость, функциональная чистота и прочие лямбды.<br/>
 <a href="https://habr.com/ru/articles/108890/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=108890#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 26 Nov 2010 15:36:05 GMT</pubDate>
      <dc:creator><![CDATA[VoidEx]]></dc:creator>
      <category><![CDATA[Haskell]]></category>
      <category><![CDATA[Haskell]]></category><category><![CDATA[WebSocket]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Монада ContT в картинках (Haskell)]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/149174/</guid>
      <link>https://habr.com/ru/articles/149174/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=149174</link>
      <description><![CDATA[На хабре уже были статьи про <a href="http://habrahabr.ru/post/127040/">продолжения и монаду ContT</a>. Я решил поделиться своим пониманием этого вопроса и снабдить его соответствующими иллюстрациями. В отличие от приведенной выше статьи, мне бы хотелось больше внимания уделить внутреннему устройству монады <i>ContT</i> и разобраться, как же она работает.<br/>
 <a href="https://habr.com/ru/articles/149174/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=149174#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Thu, 09 Aug 2012 21:09:31 GMT</pubDate>
      <dc:creator><![CDATA[Tazman]]></dc:creator>
      <category><![CDATA[Haskell]]></category><category><![CDATA[Программирование]]></category>
      <category><![CDATA[Haskell]]></category><category><![CDATA[ContT]]></category><category><![CDATA[монада]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Динамические мат. функции в C++]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/149450/</guid>
      <link>https://habr.com/ru/articles/149450/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=149450</link>
      <description><![CDATA[Здравствуйте, Хабраюзеры.<br/>
Недавно я прочитал здесь <a href="http://habrahabr.ru/post/66021/">статью</a> об анонимных функциях в С++, и тут же у меня в голове возникла мысль: нужно срочно написать класс для работы с функциями, которые нам знакомы из математики. А именно, принимающими вещественный аргумент и возвращающими вещественное же значение. Нужно дать возможность обращаться с такими объектами максимально просто, не задумываясь о реализации.<br/>
И вот, как я это реализовал.<br/>
 <a href="https://habr.com/ru/articles/149450/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=149450#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sun, 12 Aug 2012 08:47:35 GMT</pubDate>
      <dc:creator><![CDATA[Sayonji]]></dc:creator>
      <category><![CDATA[C++]]></category><category><![CDATA[Haskell]]></category>
      <category><![CDATA[C++]]></category><category><![CDATA[анонимные функции]]></category><category><![CDATA[Haskell]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Решение японских кроссвордов на Haskell]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/151819/</guid>
      <link>https://habr.com/ru/articles/151819/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=151819</link>
      <description><![CDATA[Японский кроссворд — головоломка, в которой по набору чисел нужно воссоздать исходное черно-белое изображение. Каждой строке и каждому столбцу пикселей соответствует свой набор, каждое число в котором, в свою очередь, соответствует длине блока подряд идущих черных пикселей. Между такими блоками должен быть хотя бы один белый пиксель, но точное их число неизвестно. Журналы, целиком посвященные этим головоломкам, есть в большинстве газетных киосков, так что, думаю, почти все с ними хоть раз да встречались, и потому <a href="http://ru.wikipedia.org/wiki/%D0%AF%D0%BF%D0%BE%D0%BD%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D1%80%D0%BE%D1%81%D1%81%D0%B2%D0%BE%D1%80%D0%B4">более подробное описание</a> здесь можно не приводить.<br/>
<br/>
В какой-то момент мне захотелось «научить компьютер» решать японские кроссворды так, как решаю их я сам. Никакой высокой цели, just for fun. Потом уже были добавлены способы, которые сам я применять не могу в силу ограниченных возможностей человеческого мозга, но, справедливости ради, со всеми кроссвордами из журналов программа справляется и без них.<br/>
<br/>
Итак, задача простая: решить кроссворд, а если решений много, то найти их все. Решение написано на Haskell'е, и, хотя код достаточно существенно дополняет словесное описание, даже без знания языка общую суть понять можно. Если хочется пощупать результат вживую, на <a href="http://code.google.com/p/jc-solver/">странице пректа</a> можно скачать исходники (бинарных сборок не выкладывал). Решения экспортируются в Binary PBM, из него же можно извлекать условия.<br/>
<br/>
<img src="https://habrastorage.org/storage2/c55/d43/65a/c55d4365aac6ddfd8c0fa6a31b6ca7df.png"/><br/>
<br/>
Несмотря на то, что я пытался писать максимально понятно, это не в полной мере мне удалось. Под катом очень много букв и кода и почти нет картинок.<br/>
 <a href="https://habr.com/ru/articles/151819/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=151819#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Wed, 19 Sep 2012 19:58:45 GMT</pubDate>
      <dc:creator><![CDATA[bodhisattva]]></dc:creator>
      <category><![CDATA[Haskell]]></category>
      <category><![CDATA[Haskell]]></category><category><![CDATA[японский кроссворд]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Две простенькие задачи на Haskell (для начинающих)]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/159127/</guid>
      <link>https://habr.com/ru/articles/159127/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=159127</link>
      <description><![CDATA[Приветствую всех пользователей Хабрахабр!<br/>
Я недавно начал изучать Haskell, и, немного освоив его, решил поделиться небольшим накопленным опытом. Конечно же, знания Haskell у меня не на таком уровне как у <a href="https://habrahabr.ru/users/darkus/" class="user_link">Darkus</a>, поэтому две задачи, которые описаны ниже, ориентированны больше на новичков, но опытные пользователи возможно и поправят, и подскажут как лучше сделать. Эта не только моя первая статья на Хабрахабр, но и вообще мой первый туториал, который я когда-либо писал.<br/>
 <a href="https://habr.com/ru/articles/159127/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=159127#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sun, 18 Nov 2012 11:31:01 GMT</pubDate>
      <dc:creator><![CDATA[IvanP]]></dc:creator>
      <category><![CDATA[Haskell]]></category>
      <category><![CDATA[Haskell]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Принцип «Разделяй и властвуй», а также бесконечные потоки в Haskell]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/162657/</guid>
      <link>https://habr.com/ru/articles/162657/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=162657</link>
      <description><![CDATA[Приветствую всех читателей!<br/>
Ниже идет моя точка зрения того, как я понял главу 14 из слайдов курса по Haskell у нас в университете.<br/>
Итак, сегодня мы поговорим о следующих двух темах:<ul>
<li> Принцип «Разделяй и властвуй»</li>
<li> Работа с бесконеными потоками</li>
</ul><br/>
 Экспертов в этой области прошу комментировать и поправлять, если будут неточности. Буду рад ответить на вопросы в комментариях.<br/>
 <a href="https://habr.com/ru/articles/162657/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=162657#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 14 Dec 2012 19:06:29 GMT</pubDate>
      <dc:creator><![CDATA[IvanP]]></dc:creator>
      <category><![CDATA[Haskell]]></category><category><![CDATA[Алгоритмы]]></category>
      <category><![CDATA[Haskell]]></category><category><![CDATA[divide and conquer]]></category><category><![CDATA[бесконечные потоки]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Развитие пользовательских типов данных в программировании]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/184558/</guid>
      <link>https://habr.com/ru/articles/184558/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=184558</link>
      <description><![CDATA[Хотелось бы остановиться и посмотреть на развитие языков программирования с точки зрения развития пользовательских типов данных (ПТД).<br/>
Сразу хочу оговориться, под пользователями понимаются программисты, как люди, пишущие код на этих языках. Ну, и те, кто этот код сопровождает или просто читает.<br/>
<br/>
Пользовательские типы данных — это типы данных, которые могут быть созданы пользователем на основе того, что доступно в языке.<br/>
<img src="https://habrastorage.org/storage2/f7f/aae/2b8/f7faae2b85b54ca93457509e06cc131a.jpg"/><br/>
<i>Пользователи желают иметь примерно такие типы данных</i><br/>
<br/>
Пользователи хотели иметь возможность составлять данные так, как они сами того хотят. Хотели, хотят, и наверняка будут хотеть. Всё больше, всё разнообразней и сильнее.<br/>
Именно поэтому полезно проследить за развитием пользовательских типов данных в программах и языках программирования.<br/>
 <a href="https://habr.com/ru/articles/184558/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=184558#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Wed, 26 Jun 2013 05:14:37 GMT</pubDate>
      <dc:creator><![CDATA[Vitter]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[ООП]]></category><category><![CDATA[Функциональное программирование]]></category>
      <category><![CDATA[программирование]]></category><category><![CDATA[Fortran]]></category><category><![CDATA[Lisp]]></category><category><![CDATA[C]]></category><category><![CDATA[C++]]></category><category><![CDATA[Perl]]></category><category><![CDATA[OСaml]]></category><category><![CDATA[Haskell]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Первый высокоуровневый язык программирования для квантовых компьютеров]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/185936/</guid>
      <link>https://habr.com/ru/articles/185936/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=185936</link>
      <description><![CDATA[<img src="https://habrastorage.org/storage2/3f4/d79/6e4/3f4d796e448069d882f9d0839eaa63cd.jpg" align="right"/>Хотя квантовые компьютеры существуют пока только в теории, но это не мешает делать обоснованные предположения об их будущей архитектуре и, что более важно, об интерфейсе взаимодействия с ними. Таким образом, уже сейчас есть возможность проектировать программные симуляторы квантовых компьютеров — и писать софт. <br/>
<br/>
Группа американских учёных, получив финансирование от исследовательского центра Национальной разведки США (<a href="http://www.iarpa.gov/">IARPA</a>) разработала высокоуровневый язык программирования <a href="http://arxiv.org/abs/1304.3390">Quipper</a>. Он создан на основе Haskell и <a href="http://habrastorage.org/storage2/0c9/040/2b4/0c90402b45e05b59c4c58c87de6c37d3.png">лучше подходит</a> для реализации квантовых алгоритмов, чем QCL (основан на C).<br/>
<br/>
На сегодняшний день известно как минимум <a href="http://math.nist.gov/quantum/zoo/">45 алгоритмов для квантовых компьютеров</a>. Все они описаны в научных статьях, но ни один не был реализован в программном коде. С появлением Quipper появилась такая возможность. В дальнейшем программисты смогут просто использовать готовые библиотеки для квантовых компьютеров, как они это делают сейчас на высокоуровневых языках для классической архитектуры.<br/>
 <a href="https://habr.com/ru/articles/185936/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=185936#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Mon, 08 Jul 2013 10:26:49 GMT</pubDate>
      <dc:creator><![CDATA[alizar]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Алгоритмы]]></category><category><![CDATA[Haskell]]></category>
      <category><![CDATA[Quipper]]></category><category><![CDATA[QCL]]></category><category><![CDATA[Haskell]]></category><category><![CDATA[Фортран]]></category><category><![CDATA[квантовый компьютер]]></category><category><![CDATA[квантовая физика]]></category><category><![CDATA[кубит]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Дайджест интересных новостей и материалов из мира PHP за последние две недели №9 (12.01.2013 — 25.01.2013)]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/zfort/articles/167127/</guid>
      <link>https://habr.com/ru/companies/zfort/articles/167127/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=167127</link>
      <description><![CDATA[<img src="https://habrastorage.org/storage2/d6a/094/315/d6a094315e0fa0ab961ab194269e2923.png"/><br/>
<br/>
Предлагаем вашему вниманию очередную подборку с ссылками на новости и материалы.<br/>
<br/>
Приятного чтения!<br/>
 <a href="https://habr.com/ru/articles/167127/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=167127#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 25 Jan 2013 20:17:20 GMT</pubDate>
      <dc:creator><![CDATA[alexzfort (Zfort Group)]]></dc:creator>
      <category><![CDATA[Блог компании Zfort Group]]></category><category><![CDATA[PHP]]></category><category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[дайджест]]></category><category><![CDATA[новости]]></category><category><![CDATA[подборка]]></category><category><![CDATA[ссылки]]></category><category><![CDATA[веб-разработка]]></category><category><![CDATA[PHP]]></category><category><![CDATA[Laravel]]></category><category><![CDATA[Haskell]]></category><category><![CDATA[PSR]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[PDO]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Конспекты лекций «Haskell как первый язык программирования». Часть1]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/204086/</guid>
      <link>https://habr.com/ru/articles/204086/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=204086</link>
      <description><![CDATA[<img align="left" src="https://habrastorage.org/getpro/habr/post_images/6cc/3c5/cb6/6cc3c5cb65dfb47fbdc48611fb28b715.jpg" alt="image"/><br/>
Привет Habr! Сегодня я достал свои старые конспекты по курсу «Haskell как первый язык программирования» Сергея Михайловича Абрамова и попробую максимально доходчиво и с примерами рассказать об этом замечательном языке тем, кто с ним еще не знаком. Рассказ ориентирован на неподготовленного читателя. Так что, даже если вы впервые услышали слово Haskell…  <a href="https://habr.com/ru/articles/204086/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=204086#habracut">добро пожаловать под кат.</a>]]></description>
      
      <pubDate>Thu, 28 Nov 2013 17:48:54 GMT</pubDate>
      <dc:creator><![CDATA[serr]]></dc:creator>
      <category><![CDATA[Haskell]]></category><category><![CDATA[Функциональное программирование]]></category>
      <category><![CDATA[Haskell]]></category><category><![CDATA[функциональное программирование]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[«Чем это сделать?»: поиск API — методики и проблемы]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/204124/</guid>
      <link>https://habr.com/ru/articles/204124/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=204124</link>
      <description><![CDATA[Современные программы в значительной степени строятся из готовых кирпичиков — библиотек. Уникального кода и архитектурных решений в каждой программе относительно мало. Очень часто бывает, что существующие библиотеки не слишком высокого качества, но даже самый крутой программист не станет их переписывать.<br/>
<br/>
Этот факт находит отражение и в изменении учебных курсов. Сассман, автор SICP, самого известного курса по программирование, сказал: &quot;<i> инженерное дело в середине 90-ых, а уж тем более в 2000-ых сильно отличается от инженерного дела 80-ых. В 80-ых хорошие программисты проводили много времени в размышлениях, а потом писали немного кода, который работал. Код работал близко к «железу», даже Scheme — все было прозрачно на всех стадиях. Как с резистором, достаточно посмотреть на цветную маркировку, чтобы узнать номинальную мощность, допустимые отклонения, сопротивление и V=IR — это все, что нужно знать. 6.001 был задуман как курс для обучения инженеров тому, как из маленьких кубиков, в которых они досконально разбираются, посредством простых техник составлять сложные конструкции, которые делают то, что от них хотят. Но программирование сейчас далеко не то же самое. Теперь вы ковыряетесь в непонятной или несуществующей документацией для софта, даже неизвестно, кем написанного. Вы должны досконально исследовать библиотеки, чтобы узнать, как они работают, пробовать разные исходные данные и смотреть, как реагирует код. Это в корне иная работа, и для нее требуется иной курс обучения.</i>&quot;<br/>
<br/>
Строительные кирпичики стандартизированы — каменщику обычно не приходится выбирать подходящий именно для этого места кирпич. С библиотеками все наоборот — то, что предназначено для обработки PDF не подойдет для создания распределенной вычислительной системы. Возникает потребность найти нужную библиотеку, в ней нужную функцию и понять, как ее встроить в свою программу. Google, как и любая другая ориентированная на естественный язык поисковая система пока помогает мало. Так что рассмотрим другие подходы.<br/>
 <a href="https://habr.com/ru/articles/204124/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=204124#habracut">Подробности</a>]]></description>
      
      <pubDate>Fri, 29 Nov 2013 06:48:01 GMT</pubDate>
      <dc:creator><![CDATA[potan]]></dc:creator>
      <category><![CDATA[Семантические сети]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Функциональное программирование]]></category>
      <category><![CDATA[библиотеки]]></category><category><![CDATA[API]]></category><category><![CDATA[онтологии]]></category><category><![CDATA[поиск]]></category><category><![CDATA[R]]></category><category><![CDATA[Haskell]]></category><category><![CDATA[Scala]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Дуальные числа в бизнесе или как оценить чувствительность решения к изменению начальных условий]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/222789/</guid>
      <link>https://habr.com/ru/articles/222789/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=222789</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/post_images/285/98a/c02/28598ac024b07e351f254f9d192730df.gif" align="right"/>За применение в бизнесе мнимых величин уже <a href="http://ru.wikipedia.org/wiki/Шнобелевская_премия#2002">дали премию</a>. Теперь интересно что-нибудь поиметь с <a href="http://ru.wikipedia.org/wiki/Дуальные_числа">дуальных</a>.<br/>
Дуальное число — это расширение поля действительных чисел (или любого другого, например комплексных) вида <b>a + εb</b>, где <b>a</b> и <b>b</b> — числа из исходного поля. При этом полагается, что <b>ε ε = 0</b>.<br/>
Оказывается, у таких странных чисел есть практическое приложение.<br/>
<br/>
Основным полезным свойством дуальных чисел является<br/>
<b>f(a + εb) = f(a) + εf'(a)b</b>.<br/>
Когда у нас есть формула для <b>f(x)</b>, получить производную <b>f'(x)</b> труда не составит. Но часто <b>f(x)</b> доступно только в виде алгоритма — например как решение специальным образом составленной системы линейных уравнений. Запустив алгоритм с исходными данными, в которые добавлена ε мы получим результат и значение производной по одному из параметров.<br/>
 <a href="https://habr.com/ru/articles/222789/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=222789#habracut">Немного матана с примерами на Haskell</a>]]></description>
      
      <pubDate>Wed, 14 May 2014 16:30:57 GMT</pubDate>
      <dc:creator><![CDATA[potan]]></dc:creator>
      <category><![CDATA[Haskell]]></category><category><![CDATA[Математика]]></category>
      <category><![CDATA[дуальные числа]]></category><category><![CDATA[Haskell]]></category><category><![CDATA[численные методы]]></category><category><![CDATA[классы типов]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
