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: Quickcheck2 - writing a modifier for test data (Nathan H?sken) 2. Re: [IO String] to IO [String] (Brent Yorgey) 3. Re: [IO String] to IO [String] (Ovidiu D) 4. Re: [IO String] to IO [String] (Kim-Ee Yeoh) 5. Re: [IO String] to IO [String] (Lyndon Maydwell) 6. finding the cause of an error (here head: empty list) (Nathan H?sken) ---------------------------------------------------------------------- Message: 1 Date: Sun, 31 Mar 2013 13:13:18 +0200 From: Nathan H?sken <nathan.hues...@posteo.de> Subject: Re: [Haskell-beginners] Quickcheck2 - writing a modifier for test data To: beginners@haskell.org Message-ID: <51581a4e.8070...@posteo.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed That was it. Thanks! On 03/31/2013 12:30 PM, Brent Yorgey wrote: > On Sun, Mar 31, 2013 at 12:21:48PM +0200, Nathan H?sken wrote: >> >> No instance for (QuickCheck-2.4.2:Test.QuickCheck.Arbitrary.Arbitrary >> ValidPos) > > The fact that it actually lists the package and version number in the > error message strongly suggests that the problem is conflicting > versions of the QuickCheck package. Do 'ghc-pkg list QuickCheck' to > see if you have multiple versions installed, and unregister all but > one of them. > > -Brent > > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://www.haskell.org/mailman/listinfo/beginners > ------------------------------ Message: 2 Date: Sun, 31 Mar 2013 07:30:08 -0400 From: Brent Yorgey <byor...@seas.upenn.edu> Subject: Re: [Haskell-beginners] [IO String] to IO [String] To: beginners@haskell.org Message-ID: <20130331113008.ga9...@seas.upenn.edu> Content-Type: text/plain; charset=iso-8859-1 To elaborate a bit: you originally said "I don't like that the line processing I'm doing will have to be in the IO monad" -- but since you want the processing of the list of Strings to be interleaved with IO operations, you have no choice. Pure functions of type [String] -> [String] cannot have their evaluation interleaved with IO operations. Note that functions using lazy I/O such as getContents, readFile, etc. can create exceptions to this -- but these use unsafeInterleaveIO under the hood and are widely regarded as problematic. So you could try using unsafeInterleaveIO, but it is unsafe for a reason. I do not actually know what is required to ensure you are using it safely; perhaps someone else could elaborate on this. -Brent On Sun, Mar 31, 2013 at 01:48:23PM +0300, Ovidiu D wrote: > Right. I definitely want the lazy behavior. > > Thanks > > > On Sun, Mar 31, 2013 at 1:29 PM, Brent Yorgey <byor...@seas.upenn.edu>wrote: > > > Unfortunately, with the definition > > > > f = getLine : f > > > > this will not work. 'sequence f' has to do *ALL* the IO before you > > can process even the first String in the resulting list. Since it is > > infinite, it will just sit there reading lines forever but never > > letting you process them. > > > > I think in this case using [IO String] is actually a good solution. > > > > -Brent > > > > On Sun, Mar 31, 2013 at 12:24:33PM +0200, Nathan H?sken wrote: > > > Try > > > > > > sequence :: Monad m => [m a] -> m [a] > > > > > > I thinkg > > > > > > sequence f :: IO [String] > > > > > > should be what you want. > > > > > > On 03/31/2013 12:19 PM, Ovidiu D wrote: > > > >I have the function f which reads lines form the stdin and looks like > > this: > > > > > > > >f :: [IO String] > > > >f = getLine : f > > > > > > > >What I don't like is the fact that the line processing I'm doing will > > > >have to be in the IO Monad > > > > > > > >I would like to make this function to have the signature > > > >f : IO [String] > > > >...such that I can get rid of the IO monad and pass the pure string list > > > >to the processing function. > > > > > > > >Can I do this? > > > > > > > >Thanks > > > > > > > > > > > >_______________________________________________ > > > >Beginners mailing list > > > >Beginners@haskell.org > > > >http://www.haskell.org/mailman/listinfo/beginners > > > > > > > > > > > > > _______________________________________________ > > > Beginners mailing list > > > Beginners@haskell.org > > > http://www.haskell.org/mailman/listinfo/beginners > > > > _______________________________________________ > > Beginners mailing list > > Beginners@haskell.org > > http://www.haskell.org/mailman/listinfo/beginners > > > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://www.haskell.org/mailman/listinfo/beginners ------------------------------ Message: 3 Date: Sun, 31 Mar 2013 14:42:40 +0300 From: Ovidiu D <ovidiud...@gmail.com> Subject: Re: [Haskell-beginners] [IO String] to IO [String] To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Message-ID: <CAKVsE7tg1Os0=zsVrHSdiejmnxHsfD9eq-9j=9r2y+8m2kl...@mail.gmail.com> Content-Type: text/plain; charset="iso-8859-1" That makes perfect sense. Thanks for the detailed explanation. On Sun, Mar 31, 2013 at 2:30 PM, Brent Yorgey <byor...@seas.upenn.edu>wrote: > To elaborate a bit: you originally said "I don't like that the line > processing I'm doing will have to be in the IO monad" -- but since you > want the processing of the list of Strings to be interleaved with IO > operations, you have no choice. Pure functions of type [String] -> > [String] cannot have their evaluation interleaved with IO operations. > > Note that functions using lazy I/O such as getContents, readFile, > etc. can create exceptions to this -- but these use unsafeInterleaveIO > under the hood and are widely regarded as problematic. So you could > try using unsafeInterleaveIO, but it is unsafe for a reason. I do not > actually know what is required to ensure you are using it safely; > perhaps someone else could elaborate on this. > > -Brent > > On Sun, Mar 31, 2013 at 01:48:23PM +0300, Ovidiu D wrote: > > Right. I definitely want the lazy behavior. > > > > Thanks > > > > > > On Sun, Mar 31, 2013 at 1:29 PM, Brent Yorgey <byor...@seas.upenn.edu > >wrote: > > > > > Unfortunately, with the definition > > > > > > f = getLine : f > > > > > > this will not work. 'sequence f' has to do *ALL* the IO before you > > > can process even the first String in the resulting list. Since it is > > > infinite, it will just sit there reading lines forever but never > > > letting you process them. > > > > > > I think in this case using [IO String] is actually a good solution. > > > > > > -Brent > > > > > > On Sun, Mar 31, 2013 at 12:24:33PM +0200, Nathan H?sken wrote: > > > > Try > > > > > > > > sequence :: Monad m => [m a] -> m [a] > > > > > > > > I thinkg > > > > > > > > sequence f :: IO [String] > > > > > > > > should be what you want. > > > > > > > > On 03/31/2013 12:19 PM, Ovidiu D wrote: > > > > >I have the function f which reads lines form the stdin and looks > like > > > this: > > > > > > > > > >f :: [IO String] > > > > >f = getLine : f > > > > > > > > > >What I don't like is the fact that the line processing I'm doing > will > > > > >have to be in the IO Monad > > > > > > > > > >I would like to make this function to have the signature > > > > >f : IO [String] > > > > >...such that I can get rid of the IO monad and pass the pure string > list > > > > >to the processing function. > > > > > > > > > >Can I do this? > > > > > > > > > >Thanks > > > > > > > > > > > > > > >_______________________________________________ > > > > >Beginners mailing list > > > > >Beginners@haskell.org > > > > >http://www.haskell.org/mailman/listinfo/beginners > > > > > > > > > > > > > > > > > _______________________________________________ > > > > Beginners mailing list > > > > Beginners@haskell.org > > > > http://www.haskell.org/mailman/listinfo/beginners > > > > > > _______________________________________________ > > > Beginners mailing list > > > Beginners@haskell.org > > > http://www.haskell.org/mailman/listinfo/beginners > > > > > > _______________________________________________ > > Beginners mailing list > > Beginners@haskell.org > > http://www.haskell.org/mailman/listinfo/beginners > > > _______________________________________________ > 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/20130331/43ee5f77/attachment-0001.htm> ------------------------------ Message: 4 Date: Sun, 31 Mar 2013 18:42:36 +0700 From: Kim-Ee Yeoh <k...@atamo.com> Subject: Re: [Haskell-beginners] [IO String] to IO [String] To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Message-ID: <capy+zdryxhpnkwy5b721o0tqdrkp1guuzj0wurbtav40hwc...@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1 On Sun, Mar 31, 2013 at 5:19 PM, Ovidiu D <ovidiud...@gmail.com> wrote: > I would like to make this function to have the signature > f : IO [String] > ...such that I can get rid of the IO monad and pass the pure string list to > the processing function. You could use: getContents >>= lines :: IO [String] -- Kim-Ee ------------------------------ Message: 5 Date: Sun, 31 Mar 2013 19:52:13 +0800 From: Lyndon Maydwell <maydw...@gmail.com> Subject: Re: [Haskell-beginners] [IO String] to IO [String] To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Message-ID: <CAM5QZtxrbDAeo8hNvzQgLTps=jupancpy3qkdr0fe7gxihm...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" Depending on what you're doing with the lines, it may be worth checking out the `interact` function as well :-) On Sun, Mar 31, 2013 at 7:42 PM, Kim-Ee Yeoh <k...@atamo.com> wrote: > On Sun, Mar 31, 2013 at 5:19 PM, Ovidiu D <ovidiud...@gmail.com> wrote: > > I would like to make this function to have the signature > > f : IO [String] > > ...such that I can get rid of the IO monad and pass the pure string list > to > > the processing function. > > You could use: > > getContents >>= lines :: IO [String] > > -- Kim-Ee > > _______________________________________________ > 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/20130331/412e2f56/attachment-0001.htm> ------------------------------ Message: 6 Date: Sun, 31 Mar 2013 17:42:16 +0200 From: Nathan H?sken <nathan.hues...@posteo.de> Subject: [Haskell-beginners] finding the cause of an error (here head: empty list) To: beginners@haskell.org Message-ID: <51585958.3010...@posteo.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Hey, I have written a program which, when executed produces: Main: Prelude.head: empty list Now, I can go through my program and replace all "head" with (\a -> trace ("<line-nr>: length=" ++ (show (length a))) a) Actually, I already did that, and by this I found the error. But I wonder if there would have been an easier way? Has anyone any debug advice how I could find out which call to "head" causes this without so much typing work? Thanks! Nathan ------------------------------ _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners End of Beginners Digest, Vol 57, Issue 45 *****************************************