haskell-cafe@haskell.org
[Top] [All Lists]

Re: [Haskell-cafe] Re: How to give unique name/id to nodes outside any m

Subject: Re: [Haskell-cafe] Re: How to give unique name/id to nodes outside any monad ?
From: "minh thu"
Date: Thu, 8 Jan 2009 19:54:22 +0100
Interestingly, I failed to detect sharing with StableName.
But using the graph node as a key turned to work...
If you're interested in the experiment, see attached code.

Cheers,
Thu

2009/1/8 minh thu <noteed@xxxxxxxxx>:
> 2009/1/8 Ertugrul Soeylemez <es@xxxxxxxx>:
>> "minh thu" <noteed@xxxxxxxxx> wrote:
>>
>>> Nothing, simply the notation. Now, with the remark of Luke, I'm
>>> wondering how bad it is to use makeStableName/hashStableName to "copy"
>>> the data structure in a similar one with explicit reference (that is,
>>> using pointer or keys in a map or whatever).
>>
>> Probably you're misusing the notation.  I don't see any reason, why
>> monadic notation should be less readable.  Usually it's even more
>> readable.  Luke's remark is very valid.  Haskell is the wrong language
>> for imperative programming.  You don't have _any_ benefit of Haskell, if
>> you use it like C.  Try to change your mind.  Monads aren't evil.  They
>> are there to make your life easier.  Way easier than imperative methods.
>
> Well, maybe it's is just my opinion, but I found the non-monadic code
> in the previous mail
> easier to write than the monadic one... I don't know against what
> you're making the compareason to say it's more readable.
>
> Although I agree using Haskell requires some change of thinking,
> statement like yours
> are a bit too much for me. I find Haskell a nice language even for
> imperative programming...
>
> Cheers,
> Thu
>
>> Greets,
>> Ertugrul.
>>
>>
>>> Thank you,
>>> Thu
>>>
>>> 2009/1/8 Lennart Augustsson <lennart@xxxxxxxxxxxxxx>:
>>> > Look at 
>>> > http://www.haskell.org/ghc/docs/latest/html/libraries/base/System-Mem-StableName.html.
>>> >
>>> > But what's wrong with constructing the graph in a monad?
>>> >
>>> > On Thu, Jan 8, 2009 at 9:53 AM, minh thu <noteed@xxxxxxxxx> wrote:
>>> >> Well, the processing of the data structure has to be done in the IO 
>>> >> monad.
>>> >> What is the library you talk about ? Could it give the "stable names"
>>> >> (in IO) for
>>> >> each node of the mentioned graph (I mean, after the graph has been 
>>> >> constructed
>>> >> purely) ?
>>> >>
>>> >> Thanks,
>>> >> Thu
>>> >>
>>> >> 2009/1/8 Lennart Augustsson <lennart@xxxxxxxxxxxxxx>:
>>> >>> Of course you don't need a monad, but you need to do the same
>>> >>> operations as you would with a state monad to number the nodes.  This
>>> >>> is the only way in (pure) Haskell.  There is no object identity in
>>> >>> Haskell, so if you want the nodes to have identity you need to provide
>>> >>> it.
>>> >>>
>>> >>> GHC does have a library for stable names which (in the IO monad)
>>> >>> allows you to get something akin to the address of a value in memory.
>>> >>> But that's not the functional way of doing this.
>>> >>>
>>> >>>  -- Lennart
>>> >>>
>>> >>> On Thu, Jan 8, 2009 at 9:28 AM, minh thu <noteed@xxxxxxxxx> wrote:
>>> >>>> Hi,
>>> >>>>
>>> >>>> I'd like to process some kind of graph data structure,
>>> >>>> say something like
>>> >>>>
>>> >>>> data DS = A [DS] | B DS DS | C.
>>> >>>>
>>> >>>> but I want to be able to discover any sharing.
>>> >>>> Thus, in
>>> >>>>
>>> >>>> b = B a a where a = A [C],
>>> >>>>
>>> >>>> if I want to malloc a similar data structure,
>>> >>>> I have to handle to the node representing B
>>> >>>> two times the same pointer (the one returned
>>> >>>> after allocating A [C]).
>>> >>>>
>>> >>>> To discover sharing, I thought it would be
>>> >>>> necessary to give unique name to node and
>>> >>>> then compare them while traversing the graph.
>>> >>>> I could give the name by hand but it would be
>>> >>>> cumbersome. But at least it would not require
>>> >>>> any monad for the bookkeeping of ungiven
>>> >>>> names. Is it possible to give those names
>>> >>>> automatically but outside any monad ?
>>> >>>>
>>> >>>> Thanks,
>>> >>>> Thu
>>> >>>> _______________________________________________
>>> >>>> Haskell-Cafe mailing list
>>> >>>> Haskell-Cafe@xxxxxxxxxxx
>>> >>>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>> >>>>
>>> >>>
>>> >>
>>> >
>>
>>
>>
>> --
>> nightmare = unsafePerformIO (getWrongWife >>= sex)
>> http://blog.ertes.de/
>>
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe@xxxxxxxxxxx
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>
>

Attachment: Graph.hs
Description: Text Data

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@xxxxxxxxxxx
http://www.haskell.org/mailman/listinfo/haskell-cafe
<Prev in Thread] Current Thread [Next in Thread>