<div dir="ltr">Well, you've picked the wrong beginner project :) This isn't really an algorithm that you're implementing, you're trying to reuse Haskell syntax to do something that it's not intended to do. Implementing algorithms in Haskell is a breeze if you are using a sane representation, but you need to use the right tools.</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 23, 2015 at 2:11 PM, Ali Baharev <span dir="ltr"><<a href="mailto:ali.baharev@gmail.com" target="_blank">ali.baharev@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Dear Bob,<br>
<br>
Thanks. OK, so you are saying that there is no easy way of doing it<br>
with nested tuples either. Well, that's disappointing. :(<br>
<br>
The custom parser is violating the third requirement ("without copying<br>
the data into some other datastructure first").<br>
<br>
It is a learning exercise: I am trying to understand how to achieve<br>
certain things things in Haskell. I deliberately picked this exercise<br>
because it is very challenging to do it in certain statically typed<br>
languages, and I was curious how difficult it would be to solve it in<br>
Haskell.<br>
<br>
In my opinion, you can learn a lot about programming languages in<br>
general by re-implementing algorithms in them and comparing the<br>
difficulties you encountered on the way.<br>
<br>
Best wishes,<br>
<br>
Ali<br>
<span class=""><br>
On Thu, Jul 23, 2015 at 9:38 PM, Bob Ippolito <<a href="mailto:bob@redivi.com">bob@redivi.com</a>> wrote:<br>
> You should not try and use the built-in lists or tuples to represent a tree<br>
> data structure. That's not what they're good at. You probably could make<br>
> tuples work and write functions using GHC.Generics to work with it as a tree<br>
> data structure, but it definitely won't be easy or elegant. If you want a<br>
> more economic syntax for expressing the tree you can provide shorter names<br>
> for Leaf and Node (one char isn't too bad), or else you're stuck with using<br>
> a parser. You may not have to write a parser though, perhaps JSON or YAML<br>
> would work fine for this. If it needs to go in the source file, there's<br>
> always TemplateHaskell and QuasiQuotes.<br>
><br>
</span><span class="">> On Thu, Jul 23, 2015 at 9:48 AM, Ali Baharev <<a href="mailto:ali.baharev@gmail.com">ali.baharev@gmail.com</a>> wrote:<br>
>><br>
>> Dear All,<br>
>><br>
>> I used to work at the University. Whenever a student asked me a<br>
>> question, I first focused on the question and tried to answer it.<br>
>> Sometimes the question was tough, maybe because there wasn't any easy<br>
>> solution to the problem. In those situations I used to say to my<br>
>> students: “Problem well spotted, unfortunately I cannot give you an<br>
>> answer / there is no easy solution to this problem.” However, I have<br>
>> never started questioning the questions of my students, especially<br>
>> when I could not give them an answer.<br>
>><br>
</span>>> According to the Wiki on <a href="mailto:beginners@haskell.org">beginners@haskell.org</a>: "Here, there is no<br>
<span class="">>> such thing as a 'stupid question.'" If you start questioning my<br>
>> question, then I really do not know where to go...<br>
>><br>
>> You might as well say: The whole question is pointless, just use<br>
>> Data.Tree and be done with it!<br>
>><br>
>> It is really not part of the original question, and I sooo not want to<br>
>> get into a discussion over this: It is important to have language<br>
>> support for helping humans to input data, without a full-blown parser.<br>
>> Examples would be user-defined implicit type conversions and<br>
>> user-defined literals in other statically typed languages.<br>
>><br>
>> OK, let's get back to the original question.<br>
>><br>
>> Apparently, there is no easy way to solve it with nested lists.<br>
>> However, no one has touched the nested tuples so far. How can I write<br>
>> a toString function that works similarly to mine but destructures<br>
>> arbitrarily nested tuples?<br>
>><br>
>> Thanks,<br>
>><br>
>> Ali<br>
>><br>
</span><span class="">>> On Thu, Jul 23, 2015 at 9:41 AM, Imants Cekusins <<a href="mailto:imantc@gmail.com">imantc@gmail.com</a>> wrote:<br>
>> > .. on the other hand, if facing this problem:<br>
>> > - import large trees from concise human-readable representation as<br>
>> > string<br>
>> ><br>
>> > , it is probably possible to write a parser which does just that.<br>
>> ><br>
>> > After all json parser works somehow ;)<br>
>> ><br>
>> > Just saying that you could do this in Haskell, given enough interest.<br>
>> > _______________________________________________<br>
>> > Beginners mailing list<br>
</span>>> > <a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<span class="">>> > <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
>> _______________________________________________<br>
>> Beginners mailing list<br>
</span>>> <a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<span class="">>> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
><br>
><br>
><br>
> _______________________________________________<br>
> Beginners mailing list<br>
</span>> <a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<span class="">> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
><br>
_______________________________________________<br>
Beginners mailing list<br>
</span><a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
</blockquote></div><br></div>