Dear Hugs users,

could you answer the following question from a Haskell novice?

In "Yet another Haskell Tutorial" by Hal Daumé III there is the following 
exercise:

Exercise 4.8 Write functions listHead, listTail, listFoldl and listFoldr
which are equivalent to their Prelude twins, but function on our List datatype. 
Don’t
worry about exceptional conditions on the first two.

My question is solely on listfoldr, in fact I only want to ask whether the 
solution provided in the tutorial is really so obviously wrong as I perceive it 
to be:

(What follows uses the definition

data List a = Nil
            | Cons a (List a)
)



listFoldr f y Nil = y
listFoldr f y (Cons x xs) = f x (foldr f z xs)


This IS wrong, isn't it? The y does not even appear after all.

And what can you say about my attempt
for listFoldr?

listFoldr f y Nil = y
listFoldr f y (Cons x xs) = f y (listFoldr f (f y x) xs)


My attempt yields a similar, albeit not identical result compared with the 
Prelude function foldr when :t-ing it under Hugs:

Hugs> :t foldr 
foldr :: (a -> b -> b) -> b -> [a] -> b

Hugs> :t listFoldr 
listFoldr :: (a -> a -> a) -> a -> List a -> a


Thank you very much.

Christian
-- 


Echte DSL-Flatrate dauerhaft für 0,- Euro*. Nur noch kurze Zeit!
"Feel free" mit GMX DSL: http://www.gmx.net/de/go/dsl
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to