On Mon, 18 Feb 2002, Jay Cox wrote: > On 18 Feb 2002, Ketil Z. Malde wrote: > > > > > Hi, > > > > I'm a bit puzzled by this observatio that I made. I have a function > > that, pseudocoded, lookes somewhat like > > > > f i as bs cs = ins i (f (i+1) as) ++ ins i (f (i+1) bs) ++ ins i (f (i+1) cs) > > where ins i = manipulates the first element of the list > > > > Now, without the ins'es, the function appears to be lazy, i.e I can > > "take" a part of it without evalutating the rest. With the ins'es, > > the whole thing seems to be calculated as soon as I touch it. > > > > Is this obvious? Or is my observation wrong? > > > > -kzm > > > um, looks like ins i returns a function of one argument which results > in a list. (or ins is a function of two arguments which results in a list > and ins i is just using currying; however you want to look at it) > > My question is if that function (ins i) is strict. > > Jay
<Cough>. I should have read your letter more closely. > > where ins i = manipulates the first element of the list if you mean that (ins i) :: [a] -> [a] manipulates the first element of the list it takes then of course it is strict. because in ins i = \x -> case x of (a:as) -> foo a : as [] -> [] where foo a = ... ((ins i) list) must pattern match on list. therefore (ins i) _|_ = _|_ QED. I guess the kind of strictness I was thinking about is something along the lines of what you might get if you applied deepseq to the list (if such a type of strictness has been defined by anybody!) I got a bit confused. (example definition for sake of argument) (a:xs) ++ list = a:(xs ++ list) [] ++ list = list If (ins i) had such deep strictness then when the first element of (f i as bs cs) was forced, haskell would generate all of the list created by (ins i (f (i+1) as) since (++) is strict in the first argument. however, (:) is strict in neither argument, so (++) is lazily applied. Anyway... You might follow Bernard James POPE <[EMAIL PROTECTED]> recent posting (Subject: re: order of evaluation) about using "undefined" in the list to see how things are being evaluated, like in list = 3:4:5:undefined or list = 3:4:5:error "foo" (I got that idea from one of Simon Marlow's papers) Jay Cox PS: deepseq was mentioned earlier in either this list or the other main Haskell list. I believe it was actually a DeepSeq module of some sort. _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe