<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Voici les pragmas avec lesquelles ton programme compile (ghc 7.6.3):<div><br></div><div><div>{-# LANGUAGE MultiParamTypeClasses #-}</div><div>{-# LANGUAGE FunctionalDependencies #-}</div><div>{-# LANGUAGE FlexibleInstances #-}</div><div><br></div><div>FYI, cela fait environ 8 ans que je présente des confs, surtout dans les milieux agiles, sur la prof. fonctionnelle en gênéral et Haskell en particulier.</div><div><br></div><div>IMHO, les concepts de base sont déjà suffisamment éloignés de la réalité quotidienne de 95% Des programmeurs pour ne pas en rajouter dans la complexité. En plus le plaisir de faire du Haskell vient aussi de la légèreté de la syntaxe, de la transparence référentielle qui te permet de factoriser et abstraire n’importe quel bout de code. Dérouler des fonctions de base, des types simples, les “abstraire” simplement dans d’autres fonctions, construire éventuellement des fonctions d’ordre supérieur, et faire tout ça de manière sûre parce que fortement typée et testée, c’est déjà beaucoup. </div><div><br></div><div>Les lens, les monades, les applicatifs, c’est du bruit pour les hipster. Personne n’est Edward Kmett ou Simon Peyton-Jones donc ça ne sert à rien de faire semblant. </div><div><br></div><div>En informatique il y a deux principes pour réussir: Keep It Simple and Loose Couping.</div><div><br></div><div>Bon travail,</div><div>Arnaud</div><div><br></div><div><div>On 03 Apr 2014, at 19:32, Gautier DI FOLCO <<a href="mailto:gautier.difolco@gmail.com">gautier.difolco@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">Le 3 avril 2014 16:33, Arnaud Bailly <span dir="ltr"><<a href="mailto:arnaud.oqube@gmail.com" target="_blank">arnaud.oqube@gmail.com</a>></span> a écrit :<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div></div>Je ne vois pas trop la partie TDD, je trouve personnellement les tests peu expressifs.</div>
</div></blockquote><div><br></div><div>Je pensais le faire vis-à-vis de la "distillation" des spécifications, je m'explique.<br></div><div>J'ai un diaporama qui va contenir les instructions que je dévoilerais au fur et à mesure :<br>
<div class="" id="LC64"><span class="">  - Les</span> <span class="">temp</span><span class="">é</span><span class="">ratures</span> <span class="">sont</span> <span class="">envoy</span><span class="">é</span><span class="">es</span> <span class="">soit</span> <span class="">en</span> <span class="">°</span><span class="">C</span> <span class="">soit</span> <span class="">en</span> <span class="">°</span><span class="">F</span><span class="">,</span> <span class="">la</span> <span class="">pr</span><span class="">é</span><span class="">cision</span> <span class="">est</span> <span class="">d</span><span class="">'</span><span class="">une</span> <span class="">d</span><span class="">é</span><span class="">cimale</span><span class="">.</span></div>
<div class="" id="LC66">                        <span class="">*</span> <span class="">T</span><span class="">(</span><span class="">°</span><span class="">C</span><span class="">)</span> <span class="">=</span> <span class="">(</span><span class="">T</span><span class="">(</span><span class="">°</span><span class="">F</span><span class="">)</span> <span class="">-</span> <span class="">32</span><span class="">)</span><span class="">/</span><span class="">1.8</span></div>
<div class="" id="LC67">                        <span class="">*</span> <span class="">T</span><span class="">(</span><span class="">°</span><span class="">F</span><span class="">)</span> <span class="">=</span> <span class="">T</span><span class="">(</span><span class="">°</span><span class="">C</span><span class="">)</span> <span class="">*</span> <span class="">1.8</span> <span class="">+</span> <span class="">32</span></div>
<div class="" id="LC73"><br> - Les <span class="">temp</span><span class="">é</span><span class="">ratures</span> <span class="">sont</span> <span class="">r</span><span class="">é</span><span class="">colt</span><span class="">é</span><span class="">es</span> <span class="">matin</span> <span class="">et</span> <span class="">soir</span> <span class="">et</span> <span class="">sont</span> <span class="">envoy</span><span class="">é</span><span class="">es par</span> <span class="">ordre</span> <span class="">de</span> <span class="">r</span><span class="">é</span><span class="">colte</span><span class="">,</span> <span class="">en</span> <span class="">commen</span><span class="">ç</span><span class="">ant</span> <span class="">par</span> <span class="">un</span> <span class="">matin</span><span class="">.</span></div>
<div class="" id="LC82"><br> - On <span class="">veut</span> <span class="">les</span> <span class="">statistiques</span> <span class="">suivantes</span> <span class="">pour</span> <span class="">toutes</span> <span class="">les</span> <span class="">valeurs</span> <span class="">re</span><span class="">ç</span><span class="">ues</span> <span class="">:</span><span class=""></span> <span class="">Minimum /</span><span class=""></span> <span class="">Maximum /</span><span class=""></span> <span class="">Moyenne</span></div>
<div class="" id="LC84">    <span class="">On</span> <span class="">veut</span> <span class="">le</span> <span class="">r</span><span class="">é</span><span class="">sultat</span> <span class="">en</span> <span class="">°</span><span class="">F</span> <span class="">uniquement</span> <span class="">si</span> <span class="">toutes</span> <span class="">les</span> <span class="">valeurs</span> <span class="">sont</span> <span class="">en</span> <span class="">°</span><span class="">F</span><span class="">.<br>
<br></span></div><div class="" id="LC89"> - <span class="">On</span> <span class="">veut</span> <span class="">ces</span> <span class="">statistiques</span> <span class="">uniquement</span> <span class="">pour</span> <span class="">les</span> <span class="">mesures</span> <span class="">du</span> <span class="">matin</span> <span class="">ou</span> <span class="">uniquement</span> <span class="">pour</span> <span class="">les</span> <span class="">mesures</span> <span class="">l</span><span class="">'</span><span class="">apr</span><span class="">è</span><span class="">s</span> <span class="">midi</span><span class="">.<br>
<br></span></div><div class="" id="LC94"> - <span class="">On</span> <span class="">veut</span> <span class="">ces</span> <span class="">statistiques</span> <span class="">par</span> <span class="">semaine</span><span class="">.</span></div>
<div class="" id="LC99"><br> - <span class="">On</span> <span class="">veut</span> <span class="">ces</span> <span class="">statistiques</span> <span class="">par</span> <span class="">mois</span><span class="">.</span></div>
<div class="" id="LC104"><br> - <span class="">On</span> <span class="">veut</span> <span class="">ces</span> <span class="">statistiques</span> <span class="">par</span> <span class="">mois</span> <span class="">pour</span> <span class="">les</span> <span class="">lundi</span> <span class="">matin</span> <span class="">des</span> <span class="">semaines</span> <span class="">paires</span><span class="">.</span></div>
<br></div><div>L'idée est d'instaurer un certain rythme.<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">
<div>IMHO illustrer le TDD en Haskell implique de partir de Quickcheck. Tes tests sur l'égalité et les propriétés des Temperatures pourraient tirer parti de cet outil par exemple.</div>
</div></blockquote><div><br></div><div>J'ai un peu de mal à voir quelles propriétés tester.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">Par ailleurs si tu veux utiliser HSpec alors je te suggérerai de "suivre le grain" de l'API. <br>
<br><div><span>describe</span> <span>"Both Fahrenheit"</span> <span>$</span> <span>do</span></div><div>                <span>it</span> <span>"same"</span> <span>$</span> <span>do<br>
<br></span></div><div><span>c'est pas trés "beau", il serait plus logique d'avoir quelque chose du genre:<br><br></span><div><span>describe</span> <span>"Both Fahrenheit"</span> <span>$</span> <span>do</span></div>

<div>                <span>it</span> <span>"should be equal given same value"</span> <span>$</span> <span>do</span><div>                <span>it</span> <span>"should be different given different values"</span> <span>$</span> <span>do</span></div>

</div></div><br></div></blockquote><div><br></div><div>Je plaide coupable, mais j'aurais le même problème de nommage avec RSpec.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr"><div><div></div></div>Dans le code principal, je ne vois pas trop le problème que tu as avec ta classe: j'arrive à compiler ce code sans problème en rajoutant les flags qui vont bien (ghc me le dit...). <br>
</div></blockquote><div><br></div><div>Au moment de l'appel du programme via le shell ? J'utilise cabal, du coup je suppose que je dois regarder comment l'ajouter dedans.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr"><div>
</div>Je ne suis pas sûr non plus que l'utilisation intensive d'une notation "point-free" aide à la compréhension.... Surtout avec un pipeline de 10 fonctions. Je te suggérerai de détailler chaque partie de la fonction.<br>
</div></blockquote><div><br></div><div>ok, mais le but n'est pas qu'ils comprennent l'intégralité de la fonction, toujours est-il que ça ne me coûte rien de le faire.<br></div><div> <br></div></div><br></div>
</div>
_______________________________________________<br>Haskell-fr mailing list<br><a href="mailto:Haskell-fr@haskell.org">Haskell-fr@haskell.org</a><br>http://www.haskell.org/mailman/listinfo/haskell-fr<br></blockquote></div><br></div></body></html>