<div dir="ltr"><div>This gives me an opportunity to ask something which I've wondered for a while. I only know some very, very basic Haskell and I'm subscribed to this mailing list just because I'm fascinated by Ur/Web. After doing web development in PHP, I switched to Ruby on Rails roughly two years ago. Most people who will read the Ur/Web implementation of TodoMVC will probably be a bit like me, experienced web developers who are curious on functional programming.</div>
<div><br></div><div>When I read the source code, I can't help but think: <i>isn't this code really bad?</i></div><div><i><br></i></div><div>And I don't mean to criticize here; I genuinely know nothing about what makes good or bad functional code. </div>
<div><br></div><div>When you start learning Haskell, you're told to "forget everything you think you know about programming". Which is okay, using recursion instead of loops makes sense to me now, though it took a bit of time and mind bending. In the end it turned out to just be different from what I were used to doing.</div>
<div><br></div><div>But here you place the entire logic and presentation of the application in a single 150 lines of code long function. </div><div><br></div><div>It reminds me about the awful SQL/HTML spaghetti I wrote when I first started learning programming with PHP. And while the Ur/Web code is probably totally fine with all it's fancy type-checking and whatnot, it looks <i>really</i> <i>scary</i> to my object oriented eyes.</div>
<div><br></div><div>What about keeping code DRY? Separation of concerns? Preventing too many levels of nesting? Keeping functions short and testable? Encapsulation?</div><div><br></div><div>If you wanted to change the TodoMVC implementations of the mainstream javascript frameworks to use persistence you would only need to change the models. The rest of the application would stay the same. (Let's just ignore the actual REST API.)</div>
<div><br></div><div>I know it is asking a lot, but I would love to see how this would be refactored to use Ur/Webs database persistence.</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Sun, Jun 15, 2014 at 3:37 PM, Adam Chlipala <span dir="ltr"><<a href="mailto:adamc@csail.mit.edu" target="_blank">adamc@csail.mit.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

  

    
  
  <div bgcolor="#FFFFFF" text="#000000">
    Some of you may be familiar with <a href="http://todomvc.com/" target="_blank">TodoMVC</a>,
    a project to compare different client-side web frameworks via
    implementation of a common task.<br>
    <br>
    I recently put up <a href="http://www.impredicative.com/ur/todomvc/" target="_blank">an Ur/Web
      implementation</a>.  I've <a href="https://github.com/tastejs/todomvc/issues/912" target="_blank">poked</a> the
    TodoMVC maintainers on GitHub about including the Ur/Web code in
    their next release; we'll see how it goes!  The Ur/Web app is
    different from most of their solutions in a few ways that should
    make for some interesting negotiation.<br>
  </div>

<br>_______________________________________________<br>
Ur mailing list<br>
<a href="mailto:Ur@impredicative.com">Ur@impredicative.com</a><br>
<a href="http://www.impredicative.com/cgi-bin/mailman/listinfo/ur" target="_blank">http://www.impredicative.com/cgi-bin/mailman/listinfo/ur</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br>Torstein Saltvedt
</div>