"Matthew Brecknell" <[EMAIL PROTECTED]> writes: > Pete Kazmier: >> I understand the intent of this code, but I am having a hard time >> understanding the implementation, specifically the combination of >> 'fix', 'flip', and 'interate'. I looked up 'fix' and I'm unsure how >> one can call 'flip' on a function that takes one argument. > > I threw that in there because I figured you were up for another > challenge. :-)
Haskell has a way of making one feel dumb. This is by far the most challenging programming language I've ever used. > It took me ages to get some clue about how to use fix, quite apart from > combining it with flip. The concept of passing the output of a function > as one of its parameters ("tying the knot") can be difficult to accept, > particularly if you haven't studied lambda calculus. This is a bit mind boggling. Do you have any trivial examples that may help my understanding? > Note that I could have just written this: > >> let iterate a = do >> ... iterate a' ... >> iterate accum In the meantime, I'm more than happy to claim ignorance and stick with the above version which is very accessible to us mere mortals. > So with my use of "flip fix", I'm really just calling fix on the > anonymous function (\iterate accum -> ...), and then the parameter > ("accum") is passed to the function returned by fix. So now you just > need a couple of weeks (or months if you're as slow as me) to > understand what fix is all about... :-) I won't try to understand fix just yet, but I'm still confused by the type of fix: fix :: (a -> a) -> a It appears to me that it takes a function as an argument, and that function takes a single argument. So how are you passing fix an anonymous function taking 2 arguments? Sorry if I have beaten this horse to death, but my pea-sized brain is working overtime here. Thanks for all of the help. Pete _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe