<div dir="ltr">Since I triggered this discussion I feel obligated to summarize the important points that were presented. Is there a good place to record Haskell ecosystem related discussions (some wiki)?<div><br></div><div>-harendra</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 17 September 2016 at 05:57, Paolo Giarrusso <span dir="ltr"><<a href="mailto:p.giarrusso@gmail.com" target="_blank">p.giarrusso@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span class=""><br><br>On Friday, September 16, 2016 at 3:42:48 PM UTC+2, Kosyrev Serge wrote:<blockquote class="gmail_quote" style="margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex">Chris Kahn writes:<br>> I would like to second this thought. Using Haskell for package<br>> descriptions needs to be thought out and executed with great care and<br>> attention. It's really easy to go off the rails.<br>><br>> Scala's build system lets you do very powerful things, but it also<br>> makes things unnecessarily complicated and mystifying for beginners.<br>> At my previous work where we used Scala extensively, there were many<br>> times where the team simply resorted to external tools because<br>> figuring out how to make some seemingly trivial change to an SBT<br>> module was too time consuming.<p>Let me guess (have no idea about sbt) -- unbridled Turing completeness?</p></blockquote><div> </div><blockquote class="gmail_quote" style="margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><p>Declarativity is king for configuration, and Turing completeness ain't it -- <br>please, see my other mail about subsetting Haskell.</p></blockquote></span><div><br>That's not the main problem with SBT. How do I explain it? Take this as an example of what Haskell should *not* do.<br><br># SBT made difficult</div><div><br></div><div>Look, we all know a monad is just a monoid in the category of endofunctors, right?. Now, a SBT build configuration is just a heterogeneously-typed map from keys to monadic values that can be evaluated to a graph of setting transformers and build actions, so what's the problem?<br>And oh, I forgot to mention keys aren't simple strings but have a hierarchy themselves, and this hierarchy is used for inheritance and overriding of settings (nothing as simple as OO inheritance, mind you, think of something like CSS but different).<br></div><div>Isn't using Haskell supposed to require a PhD? So why would its build tools use something so simple as nested records, like Cabal does?<br></sarcasm><br>I think I'm trolling, but the above is somewhat accurate (except for any misunderstanding of SBT I might have)—I personally enjoy using SBT and its power, and once you learn it can be reasonably easy, but I think Kmett's lens library might be simpler to learn.<br><br>In fairness, many SBT builds can be read without having any clue of the above, because they look like imperative programs. But as soon as you need to do a bit more or you make a type error, you end up facing some of the above complexity—if you want, the "imperative program" abstraction is extremely leaky.<br><br>For instance, here's something "easy" (but count the amount of custom symbolic operators):<br><br></div><div>scalaVersion := "2.11.0"</div><div>scalacOptions += "-deprecation"<br>libraryDependencies += org.scalatest" %% "scalatest" % "2.0"</div><div><br></div><div>Then you want to use one setting when defining another, and suddenly you end up with:</div><div><br>libraryDependencies <+= scalaVersion (ver => "org.scala-lang" % "scala-compiler" % ver)<br><br>Luckily, this can be done more easily nowadays, thanks to Scala macros O_O.</div>

</div><br>______________________________<wbr>_________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>
Only members subscribed via the mailman list are allowed to post.<br></blockquote></div><br></div>