<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Coder-Studio &#187; xml</title>
	<atom:link href="http://www.coder-studio.com/blog/tag/xml/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.coder-studio.com/blog</link>
	<description></description>
	<lastBuildDate>Wed, 31 Mar 2010 00:00:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>GTK+ en Haskell</title>
		<link>http://www.coder-studio.com/blog/gtk-en-haskell/</link>
		<comments>http://www.coder-studio.com/blog/gtk-en-haskell/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 02:37:15 +0000</pubDate>
		<dc:creator>Alp Mestan</dc:creator>
				<category><![CDATA[Langages fonctionnels]]></category>
		<category><![CDATA[glade]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.coder-studio.com/blog/?p=342</guid>
		<description><![CDATA[Bonjour,
M&#8217;étant mis à Haskell depuis quelques temps (principalement grâce au désormais fameux Real World Haskell), je me suis dis qu&#8217;il était temps que je regarde un peu du côté des bibliothèques pour interfaces utilisateurs. Hé bien, je n&#8217;ai pas été déçu. Il y a notamment Gtk2Hs qui fournit un bon binding de GTK+, compatible avec [...]]]></description>
			<content:encoded><![CDATA[<p>Bonjour,</p>
<p>M&#8217;étant mis à Haskell depuis quelques temps (principalement grâce au désormais fameux <a href="http://general.developpez.com/livres/general/?page=prog-fonctionnelle#L9780596514983">Real World Haskell</a>), je me suis dis qu&#8217;il était temps que je regarde un peu du côté des bibliothèques pour interfaces utilisateurs. Hé bien, je n&#8217;ai pas été déçu. Il y a notamment <strong>Gtk2Hs</strong> qui fournit un bon binding de GTK+, compatible avec Glade (le designer) et qui permet donc de charger des interfaces depuis du XML.</p>
<p><center><img src="http://blog.developpez.com/media/gtk2hs.png" width="409" height="297" alt="Gtk2Hs en action" /></center></p>
<p><span id="more-342"></span></p>
<p>Allez-y, devinez combien de lignes il a fallu ?<br />
Initialiser le GUI, créer les widgets, &#8230; Hmm beaucoup ?</p>
<p>Hé bien non ! Le designer, Glade, exporte le &laquo;&nbsp;projet&nbsp;&raquo; suivant dans un XML.</p>
<p><center><img src="http://blog.developpez.com/media/glade.png" width="700" height="370" alt="Designer de fenêtres de GTK+" /></center></p>
<p>XML généré :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p342code3'); return false;">View Code</a> XML</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3423"><td class="code" id="p342code3"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span> 
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;glade-interface<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
  <span style="color: #808080; font-style: italic;">&lt;!-- interface-requires gtk+ 2.16 --&gt;</span> 
  <span style="color: #808080; font-style: italic;">&lt;!-- interface-naming-policy project-wide --&gt;</span> 
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;widget</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;GtkWindow&quot;</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;window1&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span> 
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;title&quot;</span> <span style="color: #000066;">translatable</span>=<span style="color: #ff0000;">&quot;yes&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Hello, Developpez !<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/property<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;default_width&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>400<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/property<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;default_height&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>400<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/property<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;child<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;widget</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;GtkButton&quot;</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;yo&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span> 
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;label&quot;</span> <span style="color: #000066;">translatable</span>=<span style="color: #ff0000;">&quot;yes&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Bonjour Developpez, comment vas-tu ? 
&nbsp;
Je suis un programme Haskell qui utilise 
Gtk2Hs, binding Haskell de GTK+. 
&nbsp;
Clique pour fermer.<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/property<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;visible&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>True<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/property<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;can_focus&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>True<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/property<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;receives_default&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>True<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/property<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/widget<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/child<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/widget<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/glade-interface<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>Et voilà, l&#8217;essentiel est fait.</p>
<p>Voici donc le main.hs, qui est le programme Haskell dont vous avez vu un screenshot plus haut :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p342code4'); return false;">View Code</a> HASKELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3424"><td class="code" id="p342code4"><pre class="haskell" style="font-family:monospace;"><span style="color: #06c; font-weight: bold;">module</span> Main <span style="color: #06c; font-weight: bold;">where</span> 
&nbsp;
<span style="color: #06c; font-weight: bold;">import</span> Graphics<span style="color: #339933; font-weight: bold;">.</span>UI<span style="color: #339933; font-weight: bold;">.</span>Gtk <span style="color: #5d478b; font-style: italic;">-- on importe le module GTK </span>
<span style="color: #06c; font-weight: bold;">import</span> Graphics<span style="color: #339933; font-weight: bold;">.</span>UI<span style="color: #339933; font-weight: bold;">.</span>Gtk<span style="color: #339933; font-weight: bold;">.</span>Glade <span style="color: #5d478b; font-style: italic;">-- et le module Glade, pour créer une IHM depuis le XML au format Glade </span>
&nbsp;
main <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #06c; font-weight: bold;">do</span> 
  initGUI 
  Just xml <span style="color: #339933; font-weight: bold;">&lt;-</span> xmlNew <span style="background-color: #3cb371;">&quot;test.glade&quot;</span>  
  window <span style="color: #339933; font-weight: bold;">&lt;-</span> xmlGetWidget xml castToWindow <span style="background-color: #3cb371;">&quot;window1&quot;</span> 
  button <span style="color: #339933; font-weight: bold;">&lt;-</span> xmlGetWidget xml castToButton <span style="background-color: #3cb371;">&quot;yo&quot;</span> 
  onClicked button <span style="color: #339933; font-weight: bold;">$</span> <span style="color: #06c; font-weight: bold;">do</span> 
  <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:putStrLn"><span style="font-weight: bold;">putStrLn</span></a> <span style="background-color: #3cb371;">&quot;Bye&quot;</span> 
  mainQuit 
  onDestroy window mainQuit 
  widgetShowAll window 
  mainGUI</pre></td></tr></table></div>

<p>Et voilà. Assez simple non ? <img src='http://www.coder-studio.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.coder-studio.com/blog/gtk-en-haskell/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Récupération et parsing d&#8217;un flux Atom XML en Haskell</title>
		<link>http://www.coder-studio.com/blog/recuperation-et-parsing-dun-flux-atom-xml-en-haskell/</link>
		<comments>http://www.coder-studio.com/blog/recuperation-et-parsing-dun-flux-atom-xml-en-haskell/#comments</comments>
		<pubDate>Mon, 04 May 2009 20:27:26 +0000</pubDate>
		<dc:creator>Alp Mestan</dc:creator>
				<category><![CDATA[Langages fonctionnels]]></category>
		<category><![CDATA[atom]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[feed]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.coder-studio.com/blog/?p=301</guid>
		<description><![CDATA[Bonsoir,
Il y a peu, on m&#8217;a demandé d&#8217;écrire un programme qui récupère un flux Atom XML et qui ne récupère que le titre et l&#8217;url des éléments (qui en l&#8217;occurence sont des billets aggrégés sur Planet OCaml).
J&#8217;ai hésité entre OCaml, C++ et Haskell. Plutôt tenté par du fonctionnel, mon choix s&#8217;est vite porté sur Haskell [...]]]></description>
			<content:encoded><![CDATA[<p>Bonsoir,</p>
<p>Il y a peu, on m&#8217;a demandé d&#8217;écrire un programme qui récupère un flux Atom XML et qui ne récupère que le titre et l&#8217;url des éléments (qui en l&#8217;occurence sont des billets aggrégés sur <a href="http://planet.ocamlcore.org/">Planet OCaml</a>).</p>
<p>J&#8217;ai hésité entre OCaml, C++ et Haskell. Plutôt tenté par du fonctionnel, mon choix s&#8217;est vite porté sur Haskell grâce au nombre impressionnant de paquets présents sur Hackage.<br />
J&#8217;ai donc opté pour le paquet <a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/feed-0.3.6">feed</a> pour la gestion d&#8217;Atom et <a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/download">download</a> pour la récupération du XML distant, qui se situe <a href="http://planet.ocamlcore.org/atom.xml">ici</a>).</p>
<div class="wp-caption aligncenter" style="width: 70px"><img alt="Haskell Logo" src="http://haskell.org/sitewiki/images/a/a8/Haskell-logo-60.png" title="Haskell Logo" width="60" height="43" /><p class="wp-caption-text">Haskell Logo</p></div>
<p><span id="more-301"></span></p>
<p>Alors, voyons voir&#8230; Premièrement, on importe les modules dont on a besoin, évidemment.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p301code15'); return false;">View Code</a> HASKELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p30115"><td class="code" id="p301code15"><pre class="haskell" style="font-family:monospace;"><span style="color: #06c; font-weight: bold;">import</span> Network<span style="color: #339933; font-weight: bold;">.</span>Download
<span style="color: #06c; font-weight: bold;">import</span> Text<span style="color: #339933; font-weight: bold;">.</span>Atom<span style="color: #339933; font-weight: bold;">.</span>Feed
<span style="color: #06c; font-weight: bold;">import</span> Text<span style="color: #339933; font-weight: bold;">.</span>Feed<span style="color: #339933; font-weight: bold;">.</span>Import
<span style="color: #06c; font-weight: bold;">import</span> Text<span style="color: #339933; font-weight: bold;">.</span>Feed<span style="color: #339933; font-weight: bold;">.</span>Types</pre></td></tr></table></div>

<p>Ensuite, on définit l&#8217;adresse du fichier atom.xml&#8230; Toujours rien de bien sorcier.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p301code16'); return false;">View Code</a> HASKELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p30116"><td class="code" id="p301code16"><pre class="haskell" style="font-family:monospace;">url <span style="color: #339933; font-weight: bold;">=</span> <span style="background-color: #3cb371;">&quot;http://planet.ocamlcore.org/atom.xml&quot;</span></pre></td></tr></table></div>

<p>Puis on se lance dans main !</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p301code17'); return false;">View Code</a> HASKELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p30117"><td class="code" id="p301code17"><pre class="haskell" style="font-family:monospace;">main <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #06c; font-weight: bold;">do</span>
    <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:putStrLn"><span style="font-weight: bold;">putStrLn</span></a> <span style="background-color: #3cb371;">&quot;*** Recent blog posts ***&quot;</span>
    Right src <span style="color: #339933; font-weight: bold;">&lt;-</span> openURIString url</pre></td></tr></table></div>

<p>Ici, on affiche simplement un message dans la console, puis on récupère le contenu du fichier dans la chaîne de caractères <em>src</em>.<br />
<strong>Right</strong> est l&#8217;un des constructeurs du type <a href="http://hackage.haskell.org/packages/archive/base/4.1.0.0/doc/html/Data-Either.html#t%3AEither"><strong>Either</strong></a>, ne vous en préoccupez pas trop.</p>
<p>Ensuite, on s&#8217;occupe à proprement parler du flux Atom&#8230;</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p301code18'); return false;">View Code</a> HASKELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p30118"><td class="code" id="p301code18"><pre class="haskell" style="font-family:monospace;"><span style="color: #06c; font-weight: bold;">let</span> Just <span style="color: green;">&#40;</span>AtomFeed is<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">=</span> parseFeedString src</pre></td></tr></table></div>

<p><strong>Just</strong> est un constructeur du type <a href="http://hackage.haskell.org/packages/archive/base/4.1.0.0/doc/html/Data-Maybe.html#t%3AMaybe"><strong>Maybe</strong></a>, qui permet de gérer les erreurs (Just mavaleur si pas eu d&#8217;erreur, Nothing si une erreur). AtomFeed est lui un constructeur pour le type <a href="http://hackage.haskell.org/packages/archive/feed/0.3.6/doc/html/Text-Feed-Types.html#t%3AFeed"><strong>Feed</strong></a> précisant que c&#8217;est un flux Atom, et non RSS1 ou RSS2 par exemple (qui sont eux aussi gérés par ce même paquet). La fonction <em>parseFeedString</em> prend donc une chaîne (ici <em>src</em>) et retourne un flux Atom&#8230; C&#8217;est là, en utilisant <em>is</em>, que l&#8217;on va pouvoir récupérer les différents éléments du XML au format Atom.</p>
<p>Bon, et si on récupérait les différentes entrées de notre flux (ici ce sont des billets de blog) ?</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p301code19'); return false;">View Code</a> HASKELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p30119"><td class="code" id="p301code19"><pre class="haskell" style="font-family:monospace;"><span style="color: #06c; font-weight: bold;">let</span> entries <span style="color: #339933; font-weight: bold;">=</span> feedEntries is</pre></td></tr></table></div>

<p>Ceci nous retourne donc une liste d&#8217;<a href="http://hackage.haskell.org/packages/archive/feed/0.3.6/doc/html/Text-Atom-Feed.html#t%3AEntry"><strong>Entry</strong></a>. Et c&#8217;est parti, on va récupérer les informations qu&#8217;il nous faut, puis les afficher !</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p301code20'); return false;">View Code</a> HASKELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p30120"><td class="code" id="p301code20"><pre class="haskell" style="font-family:monospace;"><span style="color: #06c; font-weight: bold;">let</span> infos <span style="color: #339933; font-weight: bold;">=</span> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:map"><span style="font-weight: bold;">map</span></a> <span style="color: green;">&#40;</span>\e <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="color: green;">&#40;</span>entryTitle e<span style="color: #339933; font-weight: bold;">,</span> entryId e<span style="color: green;">&#41;</span><span style="color: green;">&#41;</span> entries
<a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:mapM_"><span style="font-weight: bold;">mapM_</span></a> <span style="color: green;">&#40;</span>\<span style="color: green;">&#40;</span>x<span style="color: #339933; font-weight: bold;">,</span>y<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">-&gt;</span> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:putStrLn"><span style="font-weight: bold;">putStrLn</span></a> <span style="color: #339933; font-weight: bold;">$</span> <span style="color: green;">&#40;</span>stringize x<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;: &quot;</span> <span style="color: #339933; font-weight: bold;">++</span> y<span style="color: green;">&#41;</span> infos</pre></td></tr></table></div>

<p>Oui, oui, ça se complique un peu.<br />
Tout d&#8217;abord, qu&#8217;est-ce que <em>infos</em> ? <em>map</em> transforme chaque élément en l&#8217;image de l&#8217;élément donné par son premier argument, qui est donc une fonction. Ici, on va transformer chaque <strong>Entry</strong> en un couple <em>(titre, id)</em> associé à notre entrée, où id se trouve être l&#8217;URL originale du billet.<br />
Bon infos est donc la liste des couples (titre, url). Ah ? Ce n&#8217;étant pas tellement cette ligne qui vous faisait peur mais la suivante ?<br />
Bon, sans rentrer en détail dans les monades (<a href="http://haskell.org/haskellwiki/Monad">la page Monad du HaskellWiki</a> le faisant mieux que moi, et surtout donnant d&#8217;excellents liens pour comprendre de quoi il s&#8217;agit, où c&#8217;est utilisé, etc), on se trouve dans la monade IO. mapM_ se retrouve donc avec le type :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p301code21'); return false;">View Code</a> HASKELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p30121"><td class="code" id="p301code21"><pre class="haskell" style="font-family:monospace;"><span style="color: green;">&#40;</span>a <span style="color: #339933; font-weight: bold;">-&gt;</span> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:IO"><span style="color: #cccc00; font-weight: bold;">IO</span></a> b<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="color: green;">&#91;</span>a<span style="color: green;">&#93;</span> <span style="color: #339933; font-weight: bold;">-&gt;</span> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:IO"><span style="color: #cccc00; font-weight: bold;">IO</span></a> <span style="color: green;">&#40;</span><span style="color: green;">&#41;</span></pre></td></tr></table></div>

<p>Notre <em>[a]</em>, c&#8217;est infos, donc notre liste de couples&#8230;<br />
<em>(a -> IO b)</em> est effectivement le type de notre fonction anonyme, que je me permets de vous montrer à part ici :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p301code22'); return false;">View Code</a> HASKELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p30122"><td class="code" id="p301code22"><pre class="haskell" style="font-family:monospace;">\<span style="color: green;">&#40;</span>x<span style="color: #339933; font-weight: bold;">,</span>y<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">-&gt;</span> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:putStrLn"><span style="font-weight: bold;">putStrLn</span></a> <span style="color: #339933; font-weight: bold;">$</span> <span style="color: green;">&#40;</span>stringize x<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;: &quot;</span> <span style="color: #339933; font-weight: bold;">++</span> y</pre></td></tr></table></div>

<p>A un couple (titre,url), elle associe un appel à <em>putStrLn</em>, qui retourne <em>IO ()</em>. Donc le type <em>b</em> est en fait <em>()</em>. <em>mapM_</em> ne faut qu&#8217;effectuer des actions dans une monade donnée, en ignorant le résultat de chacune au lieu de les placer des une liste comme le fait son homologue <em>mapM</em></p>
<p>Ah oui, j&#8217;oubliais, stringize, qui est définie juste après fonction main.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p301code23'); return false;">View Code</a> HASKELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p30123"><td class="code" id="p301code23"><pre class="haskell" style="font-family:monospace;">stringize <span style="color: #339933; font-weight: bold;">::</span> TextContent <span style="color: #339933; font-weight: bold;">-&gt;</span> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:String"><span style="color: #cccc00; font-weight: bold;">String</span></a>
stringize <span style="color: green;">&#40;</span>TextString s<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">=</span> s
stringize <span style="color: #339933; font-weight: bold;">_</span> <span style="color: #339933; font-weight: bold;">=</span> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:error"><span style="font-weight: bold;">error</span></a> <span style="background-color: #3cb371;">&quot;shoud not be called on something else than TextString&quot;</span></pre></td></tr></table></div>

<p>Elle me permet juste de passer d&#8217;une valeur construite avec TextString, donc de type <a href="http://hackage.haskell.org/packages/archive/feed/0.3.6/doc/html/Text-Atom-Feed.html#t%3ATextContent"><strong>TextContent</strong></a>, à la valeur qui est en fait englobée par ce type, de type String.</p>
<p>Voilà donc le code complet :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p301code24'); return false;">View Code</a> HASKELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p30124"><td class="code" id="p301code24"><pre class="haskell" style="font-family:monospace;"><span style="color: #06c; font-weight: bold;">import</span> Network<span style="color: #339933; font-weight: bold;">.</span>Download
<span style="color: #06c; font-weight: bold;">import</span> Text<span style="color: #339933; font-weight: bold;">.</span>Atom<span style="color: #339933; font-weight: bold;">.</span>Feed
<span style="color: #06c; font-weight: bold;">import</span> Text<span style="color: #339933; font-weight: bold;">.</span>Feed<span style="color: #339933; font-weight: bold;">.</span>Import
<span style="color: #06c; font-weight: bold;">import</span> Text<span style="color: #339933; font-weight: bold;">.</span>Feed<span style="color: #339933; font-weight: bold;">.</span>Types
&nbsp;
url <span style="color: #339933; font-weight: bold;">=</span> <span style="background-color: #3cb371;">&quot;http://planet.ocamlcore.org/atom.xml&quot;</span>
&nbsp;
main <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #06c; font-weight: bold;">do</span>
    <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:putStrLn"><span style="font-weight: bold;">putStrLn</span></a> <span style="background-color: #3cb371;">&quot;*** Recent blog posts ***&quot;</span>
    Right src <span style="color: #339933; font-weight: bold;">&lt;-</span> openURIString url
    <span style="color: #06c; font-weight: bold;">let</span> Just <span style="color: green;">&#40;</span>AtomFeed is<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">=</span> parseFeedString src
    <span style="color: #06c; font-weight: bold;">let</span> entries <span style="color: #339933; font-weight: bold;">=</span> feedEntries is
    <span style="color: #06c; font-weight: bold;">let</span> infos <span style="color: #339933; font-weight: bold;">=</span> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:map"><span style="font-weight: bold;">map</span></a> <span style="color: green;">&#40;</span>\e <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="color: green;">&#40;</span>entryTitle e<span style="color: #339933; font-weight: bold;">,</span> entryId e<span style="color: green;">&#41;</span><span style="color: green;">&#41;</span> entries
    <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:mapM_"><span style="font-weight: bold;">mapM_</span></a> <span style="color: green;">&#40;</span>\<span style="color: green;">&#40;</span>x<span style="color: #339933; font-weight: bold;">,</span>y<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">-&gt;</span> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:putStrLn"><span style="font-weight: bold;">putStrLn</span></a> <span style="color: #339933; font-weight: bold;">$</span> <span style="color: green;">&#40;</span>stringize x<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;: &quot;</span> <span style="color: #339933; font-weight: bold;">++</span> y<span style="color: green;">&#41;</span> infos
&nbsp;
stringize <span style="color: #339933; font-weight: bold;">::</span> TextContent <span style="color: #339933; font-weight: bold;">-&gt;</span> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:String"><span style="color: #cccc00; font-weight: bold;">String</span></a>
stringize <span style="color: green;">&#40;</span>TextString s<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">=</span> s
stringize <span style="color: #339933; font-weight: bold;">_</span> <span style="color: #339933; font-weight: bold;">=</span> <span style="background-color: #3cb371;">&quot;stringize Error&quot;</span></pre></td></tr></table></div>

<p>La compilation :</p>
<blockquote><p>$ ghc -package download -o cwn cwn.hs</p></blockquote>
<p>Et un exemple d&#8217;execution :</p>
<blockquote><p>$ ./cwn<br />
*** Recent blog posts ***<br />
ocaml-text: http://forge.ocamlcore.org/projects/ocaml-text/<br />
0.1.3 sources now in subversion: http://forge.ocamlcore.org/forum/forum.php?forum_id=355<br />
Sudoku in ocamljs, part 2: RPC over HTTP: tag:blogger.com,1999:blog-1445545651031573301.post-3490486535879812384<br />
Caml Weekly News, 28 Apr 2009: http://alan.petitepomme.net/cwn/2009.04.28.html<br />
Bouncing Ball in OCaml with OCamlSDL: http://blog.mestan.fr/?p=31<br />
Sudoku in ocamljs, part 1: DOM programming: tag:blogger.com,1999:blog-1445545651031573301.post-4574121943207730951<br />
Using OCaml’s module functors to provide monadic contexts for Batteries: http://blog.mestan.fr/?p=30<br />
Lastfm no longer free as in free beer (and some bits about xml in OCaml): http://blog.rastageeks.org/spip.php?article34<br />
Last lecture: http://dutherenverseauborddelatable.wordpress.com/?p=571<br />
Liquidsoap now supports AAC+ encoding.: http://blog.rastageeks.org/spip.php?article33</p></blockquote>
<p>Alors, pas si &laquo;&nbsp;académique&nbsp;&raquo; que ça le fonctionnel, non ? <img src='http://www.coder-studio.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Tout ça en 18 lignes, lignes vides comprises, 15 non comprises.</p>
<p>Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coder-studio.com/blog/recuperation-et-parsing-dun-flux-atom-xml-en-haskell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
