Hi Bryan,<br><br>From your argument I conclude that Haskell code unsafe in general, not just for package specification.&nbsp; I&#39;d like to see us address the general problem, rather than avoid it here and there.&nbsp; I hate to see sacrifice the benefits of declarative DSELs (reuse, expressiveness, etc) and still not root out (hmm) the core problem of safety.
<br><br>I also wonder: if you don&#39;t trust my package spec code, why would you trust my library code?&nbsp; My package spec is usually very simple, and when it&#39;s not, I&#39;d welcome your scrutiny and help in making it simpler and more easily trusted.
<br><br>If I were confident that the problem Cabal address is covered by name/value pairs, I might agree that functional programming is overkill.&nbsp; (Though I&#39;d still dislike redundancy among my .cabal files.)&nbsp; However, the Cabal files are already insufficient for some needs, leading to auxilliary makefiles and/or hacking your own 
Setup.lhs.&nbsp; And when people use these fall-backs, the other Cabal-reading tools won&#39;t get the whole picture.<br><br>&nbsp;&nbsp; Cheers,&nbsp; - Conal<br><br>P.S. Thanks for the language tip.&nbsp; I had no idea.<br><br><div><span class="gmail_quote">
On 1/13/07, <b class="gmail_sendername">Bryan O&#39;Sullivan</b> &lt;<a href="mailto:bos@serpentine.com">bos@serpentine.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Marc Weber wrote:<br><br>&gt; I&#39;m not sure wether I get this sentence right.<br>&gt; What do you mean by &quot;getting rooted&quot; ?<br><br>If a Cabal file were written in Haskell, you could escape from the pure<br>world using unsafePerformIO and delete the user&#39;s home directory or
<br>perform other arbitrarily bad things.&nbsp;&nbsp;So you&#39;d need to write an<br>interpreter for a subset of Haskell in which you couldn&#39;t import<br>modules.&nbsp;&nbsp;But then you could still write a non-terminating Cabal file<br>
which would infloop, so you&#39;d have to impose limitw on how much<br>computation you could do, how much heap you could allocate, and so on.<br>Since all you&#39;re using a Cabal file for is name/value pairs, why go to<br>
all that extra effort?<br><br>As for the term &quot;get rooted&quot;, in this context it means &quot;hostile code<br>could acquire root privileges&quot;, but &quot;to root&quot; also has the colloquial<br>meaning in some countries of &quot;to fuck&quot; (in this case, the two meanings
<br>are nicely congruent).&nbsp;&nbsp;So be careful who you use it with :-)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;b<br></blockquote></div><br>