Sufficient, but not good.
Try zippers instead.
On 15 Jul 2009, at 08:29, John Ky wrote:
Hello,
Actually, I wanted to be able to create a tree structure when I can
navigate both leaf-ward and root-ward. I didn't actually care for
equality.
I think the tying the knot technique as mentioned by others is
sufficient for this purpose.
Cheers,
-John
On Wed, Jul 15, 2009 at 8:55 AM, John Dorsey <[email protected]>
wrote:
John,
> Is it possible to create a circular pure data structure in
Haskell? For
> example:
Creating the data structure is easy; as other respondents have
pointed out.
A simple example is this...
ones = 1 : ones
ones' = 1 : ones'
Comparing these values is harder. All of (ones), (ones'), (tail
ones), and
so forth are equal values. But I don't know how to compare them. My
Spidey-sense tells me there's probably a simple proof that you
can't, if you
care about the comparison terminating.
"Pointer equality" (ie. testing if the values are represented by the
same
bits in memory) is no good, since it's entirely up to the compiler
whether
ones and ones' use the same bits. (They won't, but that's not
important.)
In general "pointer equality" of Haskell values, such as ones and
(tail
ones) interferes with referential transparency, which is held in high
regard around here. Although, for the record, when pointer equality
is
really what you want, I'm sure there's ways to Force It.
For your purposes, does it matter if you can actually do the
comparison? Is
it enough to know that ones and (tail ones) are equal?
Regards,
John
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe