Send Beginners mailing list submissions to
        beginners@haskell.org

To subscribe or unsubscribe via the World Wide Web, visit
        http://www.haskell.org/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
        beginners-requ...@haskell.org

You can reach the person managing the list at
        beginners-ow...@haskell.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."


Today's Topics:

   1.  Re: monad nomad gonad gomad (prad)
   2. Re:  Re: monad nomad gonad gomad (Michael Mossey)
   3.  Re: monad nomad gonad gomad (prad)
   4. Re:  Re: monad nomad gonad gomad (John Obbele)
   5. Re:  Re: monad nomad gonad gomad (Michael Mossey)
   6.  hClose: illegal operation (handle is finalized)  and/or
      <<loop>> (Travis Erdman)
   7. Re:  hClose: illegal operation (handle is finalized) and/or
      <<loop>> (Felipe Lessa)
   8. Re:  hClose: illegal operation (handle is finalized) and/or
      <<loop>> (anderson leo)


----------------------------------------------------------------------

Message: 1
Date: Tue, 17 Aug 2010 10:25:25 -0700
From: prad <p...@towardsfreedom.com>
Subject: [Haskell-beginners] Re: monad nomad gonad gomad
To: beginners@haskell.org
Message-ID: <20100817102525.6ed22...@gom>
Content-Type: text/plain; charset=US-ASCII

On Sun, 15 Aug 2010 21:11:52 +0200
Ertugrul Soeylemez <e...@ertes.de> wrote:

> Just remember this:  You have an IO computation?  You want to refer to
> its result?  Fine, just use '<-'.  That's it.
>
that's what i've been doing the past two days and it works ... except
in one case.

for example, i have:

========
    flData <- readFile key
    let (sec:tle:kwd:dsc:url:typ:dat:txt) = lines flData
========

so flData is the computation which reads the contents of a file and i
can take that and do a lines on it. no problem.

however, i also have:

========
subs (l:ls)
    | ls==[]    = l : []
    | otherwise = 
        case l of
            "```"   -> do
                let (code:z)   = ls
                    str        = gt code    -- works
                --str <- readFile "B"       -- doesn't work
                subs (str:z)
            _       -> l : subs ls


gt s =
   case s of
        "B"    -> "BBBB"
        "C"    -> "CCCC"
========

now str = gt code is fine because it's not monadic. however, if i try
to get the data from a file or a db, it gives the error

    Couldn't match expected type `[[Char]]'
           against inferred type `IO b'

because i'm trying to get an IO monad into a [String] from what i
understand.

so i'm trying different things here, but haven't found a way yet.


> In fact, I recommend not to think more, but to think less.
>
ok! i'll see what i can do!
as you rightly keep telling me, i'm being way too complicated. :D

i'm enjoying your extensive tutorial:
http://ertes.de/articles/monads.html

though it's going slowly, but things are coming together little by
little.

i was also pointed to this:
http://codingcactus.wordpress.com/2010/08/16/writemonad1/

and i just saw mike vanier's post here:
very detailed monad tutorials (a series of articles)
http://mvanier.livejournal.com/3917.html

so with all this help i'm sure to 'get it' eventually!

> At some point it will make click and suddenly everything gets clear.
> Everybody has this experience with monads (unless they give up).
>
no worries about that!
i do see the light in the long tunnel - now it's just a matter of
getting to it.

-- 
In friendship,
prad

                                      ... with you on your journey
Towards Freedom
http://www.towardsfreedom.com (website)
Information, Inspiration, Imagination - truly a site for soaring I's




------------------------------

Message: 2
Date: Tue, 17 Aug 2010 13:34:01 -0700
From: Michael Mossey <m...@alumni.caltech.edu>
Subject: Re: [Haskell-beginners] Re: monad nomad gonad gomad
To: beginners@haskell.org
Message-ID: <4c6af239.8010...@alumni.caltech.edu>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed



prad wrote:
> On Sun, 15 Aug 2010 21:11:52 +0200
> however, i also have:
> 
> ========
> subs (l:ls)
>     | ls==[]    = l : []
>     | otherwise = 
>         case l of
>             "```"   -> do
>                 let (code:z)   = ls
>                     str        = gt code    -- works
>                 --str <- readFile "B"       -- doesn't work
>                 subs (str:z)
>             _       -> l : subs ls
> 
> 
> gt s =
>    case s of
>         "B"    -> "BBBB"
>         "C"    -> "CCCC"
> ========

Can I make a general suggestion? It looks to me like you need to work 
through a book like "Real World Haskell" sequentially from the beginning. 
It looks like you are trying to do complex things before you've mastered 
simple things.

Mike


------------------------------

Message: 3
Date: Tue, 17 Aug 2010 13:59:44 -0700
From: prad <p...@towardsfreedom.com>
Subject: [Haskell-beginners] Re: monad nomad gonad gomad
To: beginners@haskell.org
Message-ID: <20100817135944.4b016...@gom>
Content-Type: text/plain; charset=US-ASCII

On Tue, 17 Aug 2010 13:34:01 -0700
Michael Mossey <m...@alumni.caltech.edu> wrote:

> It looks to me like you need to work 
> through a book like "Real World Haskell" sequentially from the
> beginning.
>
well i'm doing that too, michael. (i remember you made this
suggestion to me several weeks ago and i have worked my way
through a few chapters in rw and most of the haskell wiki
tutorial). 

i've joined the reading group on the agora forum for
rwhaskell. i'm also going through the video lectures here:
http://www.cs.nott.ac.uk/~gmh/book.html

what i find interesting is that you say what i'm trying to do here is
complicated, because it seemed to me it was one of the simpler things
that i actually understood. now i think i'm in trouble, because
evidently i haven't understood it too well. :D

it seemed to me that in one situation i was trying to get data from a
function gt which just returns a string:
gt :: String -> String

in the other situation, i wanted to get the same data from a file, but
can't seem to because the file is returning an IO instead of a String
(in fact it is expecting [String]).

however, i know you are right. i really need to get a better
understanding of the basics, so i'll focus on that for the next few
days and see if i can understand these problems i'm having better than
i presently do.

-- 
In friendship,
prad

                                      ... with you on your journey
Towards Freedom
http://www.towardsfreedom.com (website)
Information, Inspiration, Imagination - truly a site for soaring I's




------------------------------

Message: 4
Date: Wed, 18 Aug 2010 00:26:21 +0200
From: John Obbele <john.obb...@gmail.com>
Subject: Re: [Haskell-beginners] Re: monad nomad gonad gomad
To: beginners@haskell.org
Message-ID: <20100817222621.gc14...@megabook.localdomain>
Content-Type: text/plain; charset=us-ascii

On Tue, Aug 17, 2010 at 01:59:44PM -0700, prad wrote:
> On Tue, 17 Aug 2010 13:34:01 -0700
> Michael Mossey <m...@alumni.caltech.edu> wrote:
> 
> > It looks to me like you need to work 
> > through a book like "Real World Haskell" sequentially from the
> > beginning.
> >
> well i'm doing that too, michael. (i remember you made this
> suggestion to me several weeks ago and i have worked my way
> through a few chapters in rw and most of the haskell wiki
> tutorial). 

Well, I may not help you, Prad, but the enormous amount of
questions you've send to this mailing-list have helped me to
re-discover many basic concepts of Haskell ,-)

I am also trying to learn it since last January. So I can add
this piece of advice for you : do not rush things. It seems you
are reading too many different contents on monads lately. That's
strange for someone as lazy as me who cannot digest this much
amount of data in such a short time.

I usually evaluate my time spend on a specific subject as the
number of nights spend between each of my readings and I can say
this: monads have taken me a good month of sleep to figure them
out :)

> what i find interesting is that you say what i'm trying to do here is
> complicated, because it seemed to me it was one of the simpler things
> that i actually understood. now i think i'm in trouble, because
> evidently i haven't understood it too well. :D

No it's not simple. I am not able to read Haskell code which play
with database and files, so your code is already behind my
understanding.

> it seemed to me that in one situation i was trying to get data from a
> function gt which just returns a string:
> gt :: String -> String
> 
> in the other situation, i wanted to get the same data from a file, but
> can't seem to because the file is returning an IO instead of a String
> (in fact it is expecting [String]).

>From what I remember, RWH's authors always advocate to
separate monadic code from basic code. You should pause for a
moment and refactor your code so you do not get caught in this
situation again (situation = trying to read a file as you read a
String).

If I were you, I would break my problem in even smaller chunks
and try to analyze patiently how Haskell could process each
individually.

regards,
/John

P.S.: ah ! and keep posting questions on precise problems you
encounter. I may be interested in them :p


------------------------------

Message: 5
Date: Tue, 17 Aug 2010 16:02:22 -0700
From: Michael Mossey <m...@alumni.caltech.edu>
Subject: Re: [Haskell-beginners] Re: monad nomad gonad gomad
To: beginners <beginners@haskell.org>
Message-ID: <4c6b14fe.6070...@alumni.caltech.edu>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed



prad wrote:
> On Tue, 17 Aug 2010 13:34:01 -0700
> Michael Mossey <m...@alumni.caltech.edu> wrote:
> 
>> It looks to me like you need to work 
>> through a book like "Real World Haskell" sequentially from the
>> beginning.
>>

> what i find interesting is that you say what i'm trying to do here is
> complicated, because it seemed to me it was one of the simpler things
> that i actually understood. now i think i'm in trouble, because
> evidently i haven't understood it too well. :D

It may be simple to do once you understand, but your past several questions 
relate to

- purity

- do-notation as syntactic sugar for monadic computations

- the IO monad

If you understood these things you would not be running into this trouble, 
or you would quickly see the problem yourself. Because most books and 
tutorials introduce these things gradually, giving you lots of practice 
problems /at the level they are introduced/, I think your learning process 
would go more smoothly if you

- pick a single book. don't try to digest all these different tutorials and 
books at once

- read it sequentially

- work the problems. if you want to branch into your own problem, stay 
close to the examples you've seen so far

Best wishes,
Mike


------------------------------

Message: 6
Date: Tue, 17 Aug 2010 16:39:26 -0700 (PDT)
From: Travis Erdman <traviserd...@yahoo.com>
Subject: [Haskell-beginners] hClose: illegal operation (handle is
        finalized)      and/or <<loop>>
To: beginners@haskell.org
Message-ID: <505127.3530...@web114718.mail.gq1.yahoo.com>
Content-Type: text/plain; charset=us-ascii

> > putStrLn $ show result
> >
> > <<loop>>
> 
> That is the *real* error message.
> 
> It means that where you define result, you refer to result
> also on the right-hand side in a way that is an endless
> loop instead of well-behaved recursion.
> 
> We would have to see more of your code to be able to
> say much more.

Thank you very much ... now I have isolated the offending "loop" code:

I am folding with a function that takes a tree and the input data, and delivers 
a "processed"/"updated" tree.  The function that is used in the fold is 
"calcTree".  calcTree is also recursive ... it updates the root node, then 
recursively calls itself to update each of its children, which is all working 
fine.  Here are simplified versions of my structure:

data Tree a = Node a [Tree a]

calcTree (Node oldData oldsubtree) input = Node newData recurseChildren
   where
       {-calculate newData from oldData and input-}
       recurseChildren = if {BOOLEANS} then oldsubtree else map (\old -> 
calcTree old input) oldsubtree

And, in words:  if certain conditions become true, there will be no change in 
any decedent node from the current node (ie all newData = oldData, and tree 
structure never changes), so rather than waste exponential time traversing all 
the decedent nodes, I'd like to just re-use the ones I already have, as they 
are identical.  This is "pruning" the tree.  If I remove this pruning, the 
"<<LOOP>>" objection ceases and the code executes as expected ... except it 
takes lots longer than it should, because there are usually lots of oppt'ys for 
pruning, and I'd rather not explicitly traverse all of them.

How can I make this work?

Thanks again for all the A's to my Q's !


      


------------------------------

Message: 7
Date: Tue, 17 Aug 2010 20:57:24 -0300
From: Felipe Lessa <felipe.le...@gmail.com>
Subject: Re: [Haskell-beginners] hClose: illegal operation (handle is
        finalized) and/or <<loop>>
To: Travis Erdman <traviserd...@yahoo.com>
Cc: beginners@haskell.org
Message-ID:
        <aanlktintktvsgaw8wrsc6qbv7l0wwhwsaoqc4krkw...@mail.gmail.com>
Content-Type: text/plain; charset=UTF-8

On Tue, Aug 17, 2010 at 8:39 PM, Travis Erdman <traviserd...@yahoo.com> wrote:
> calcTree (Node oldData oldsubtree) input = Node newData recurseChildren
>   where
>       {-calculate newData from oldData and input-}
>       recurseChildren = if {BOOLEANS} then oldsubtree else map (\old -> 
> calcTree old input) oldsubtree
>
> And, in words:  if certain conditions become true, there will
> be no change in any decedent node from the current node (ie all
> newData = oldData, and tree structure never changes), so rather
> than waste exponential time traversing all the decedent nodes,
> I'd like to just re-use the ones I already have, as they are
> identical.  This is "pruning" the tree.  If I remove this
> pruning, the "<<LOOP>>" objection ceases and the code executes
> as expected ... except it takes lots longer than it should,
> because there are usually lots of oppt'ys for pruning, and I'd
> rather not explicitly traverse all of them.
>
> How can I make this work?

Perhaps in your {BOOLEANS} you are referring to
'recurseChildren', which in turn needs the {BOOLEANS}?

HTH!

--
Felipe.


------------------------------

Message: 8
Date: Wed, 18 Aug 2010 08:04:23 +0800
From: anderson leo <fireman...@gmail.com>
Subject: Re: [Haskell-beginners] hClose: illegal operation (handle is
        finalized) and/or <<loop>>
To: Travis Erdman <traviserd...@yahoo.com>
Cc: Beginners@haskell.org
Message-ID:
        <aanlktikwzmna_htdwbleymb-hxymdpqninbk2e=ao...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"

It seems there is no empty node which might make a inifinite loop.

--Andrew

On Wed, Aug 18, 2010 at 7:39 AM, Travis Erdman <traviserd...@yahoo.com>wrote:

> > > putStrLn $ show result
> > >
> > > <<loop>>
> >
> > That is the *real* error message.
> >
> > It means that where you define result, you refer to result
> > also on the right-hand side in a way that is an endless
> > loop instead of well-behaved recursion.
> >
> > We would have to see more of your code to be able to
> > say much more.
>
> Thank you very much ... now I have isolated the offending "loop" code:
>
> I am folding with a function that takes a tree and the input data, and
> delivers a "processed"/"updated" tree.  The function that is used in the
> fold is "calcTree".  calcTree is also recursive ... it updates the root
> node, then recursively calls itself to update each of its children, which is
> all working fine.  Here are simplified versions of my structure:
>
> data Tree a = Node a [Tree a]
>
> calcTree (Node oldData oldsubtree) input = Node newData recurseChildren
>   where
>       {-calculate newData from oldData and input-}
>       recurseChildren = if {BOOLEANS} then oldsubtree else map (\old ->
> calcTree old input) oldsubtree
>
> And, in words:  if certain conditions become true, there will be no change
> in any decedent node from the current node (ie all newData = oldData, and
> tree structure never changes), so rather than waste exponential time
> traversing all the decedent nodes, I'd like to just re-use the ones I
> already have, as they are identical.  This is "pruning" the tree.  If I
> remove this pruning, the "<<LOOP>>" objection ceases and the code executes
> as expected ... except it takes lots longer than it should, because there
> are usually lots of oppt'ys for pruning, and I'd rather not explicitly
> traverse all of them.
>
> How can I make this work?
>
> Thanks again for all the A's to my Q's !
>
>
>
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
http://www.haskell.org/pipermail/beginners/attachments/20100817/c0a09771/attachment.html

------------------------------

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners


End of Beginners Digest, Vol 26, Issue 36
*****************************************

Reply via email to