Dear friends: I am an ULTRA-ULTRA Haskell beginner, just started literally yesterday. I am just toying around with Cordelia Hall and John O'Donnell excellent book on dicrete mathematics with Haskell. Well, they have a program, stdm, to accompany the book. It happens that it is in literate style. In theory, this should be very easy to work with, but after saving it with lhs extension, I try to load it, without success. Could somebody out there help me with this? Best regards, Francisco Gutiérrez From: "beginners-request@haskell.org" <beginners-request@haskell.org> To: beginners@haskell.org Sent: Monday, April 16, 2012 2:45 PM Subject: Beginners Digest, Vol 46, Issue 23 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-request@haskell.org You can reach the person managing the list at beginners-owner@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: splitAt implementation (using foldr) and infinite lists (Lorenzo Bolla) 2. Re: splitAt implementation (using foldr) and infinite lists (Ozgur Akgun) 3. Re: Design of Webmachine in Haskell (Petar Radosevic) 4. Re: Design of Webmachine in Haskell (Michael Snoyman) 5. Re: splitAt implementation (using foldr) and infinite lists (Dmitriy Matrosov) 6. Training tasks (Nikita Beloglazov) 7. Cross-platform .hs files on Linux and Windows (Vinay Sajip) 8. Re: Cross-platform .hs files on Linux and Windows (Lorenzo Bolla) ---------------------------------------------------------------------- Message: 1 Date: Mon, 16 Apr 2012 15:21:55 +0100 From: Lorenzo Bolla <lbolla@gmail.com> Subject: Re: [Haskell-beginners] splitAt implementation (using foldr) and infinite lists Cc: beginners@haskell.org Message-ID: <20120416142155.GC30186@dell> Content-Type: text/plain; charset=us-ascii On Mon, Apr 16, 2012 at 12:52:02PM +0400, Dmitriy Matrosov wrote:
Hi all.
If i implement take using foldr
take' :: Int -> [a] -> [a] take' n = foldr (\x z -> if fst x <= n then snd x : z else []) [] . zip [1..]
it'll work fine with infinite lists. But if i implement splitAt similarly
splitAt' :: Int -> [a] -> ([a], [a]) splitAt' n = foldr (\x (z1, z2) -> if fst x <= n then (snd x : z1, z2) else ([], snd x : z2)) ([], []) . zip [1..]
and call it like this
*Main> fst $ splitAt' 4 [1..] ^CInterrupted.
Try something like this: splitAt' n = foldr (\x zs -> if fst x <= n then (snd x : fst zs, snd zs) else ([], snd x : snd zs)) ([], []) . zip [1..] I'm no Haskell expert, but I suspect that when pattern-matching z2, it tries to evaluate it and it hangs... My version does not hang... hth, L. -- Lorenzo Bolla http://lbolla.info ------------------------------ Message: 2 Date: Mon, 16 Apr 2012 15:55:20 +0100 From: Ozgur Akgun <ozgurakgun@gmail.com> Subject: Re: [Haskell-beginners] splitAt implementation (using foldr) and infinite lists To: Lorenzo Bolla <lbolla@gmail.com> Cc: beginners@haskell.org Message-ID: <CALzazPAs7X+JXD5nu4+E+HiyCeQhbMwJ7qJ+beC0uCzips6gFA@mail.gmail.com> Content-Type: text/plain; charset="utf-8" You can also use lazy pattern matching. http://en.wikibooks.org/wiki/Haskell/Laziness#Lazy_pattern_matching On 16 April 2012 15:21, Lorenzo Bolla <lbolla@gmail.com> wrote:
splitAt' :: Int -> [a] -> ([a], [a]) splitAt' n = foldr (\x ~(z1, z2) -> if fst x <= n then (snd x : z1, z2) else ([], snd x : z2)) ([], []) . zip [1..]
Ozgur