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: List.sort (John Dorsey) 2. Re: The Applicative instance for ((->) a) (Heinrich Apfelmus) 3. Re: List.sort (Patrick LeBoutillier) 4. Re: List.sort (Chadda? Fouch?) 5. Re: List.sort (Patrick LeBoutillier) 6. Re: List.sort (Geoffrey Marchant) 7. external sort (Keith Sheppard) 8. Re: external sort (Felipe Lessa) ---------------------------------------------------------------------- Message: 1 Date: Sat, 11 Jul 2009 09:17:04 -0400 From: John Dorsey <hask...@colquitt.org> Subject: Re: [Haskell-beginners] List.sort To: beginners@haskell.org Message-ID: <20090711131704.gr23...@colquitt.org> Content-Type: text/plain; charset=us-ascii I sent this only to Patrick by mistake. Sorry for the duplicate, Patrick. -- Patrick, > Ord a => [a] -> [a] > > I don't understand how this type can allow it to sort pairs: > > Prelude> :m +List > Prelude List> sort [(1, "1"), (3, "3"), (2, "2")] > [(1,"1"),(2,"2"),(3,"3")] > > How can a pair by of type "Ord a"? Is it a rule that the first element > is automatically used? "Ord a" isn't really the type of a pair... it's a type *constraint* on the argument to the sort function, which is otherwise any type "a". So it means List.sort can be applied to any type "a" which satisfies "Ord a". But what does that mean? It means that there is an instance for the typeclass Ord for whatever type is given to Listsort. In the case of pairs, it's exactly as you guessed... the leftmost parts are compared first. This is so because somewhere there's an "instance Ord (a,b)" that defines how to compare pairs, and it does it that way (left-to-right). (And this generalizes to tuples bigger than pairs, up to some compiler-specific limit.) Does this make sense? John ------------------------------ Message: 2 Date: Sat, 11 Jul 2009 17:53:20 +0200 From: Heinrich Apfelmus <apfel...@quantentunnel.de> Subject: [Haskell-beginners] Re: The Applicative instance for ((->) a) To: beginners@haskell.org Message-ID: <h3ach3$3e...@ger.gmane.org> Content-Type: text/plain; charset=ISO-8859-1 Ian Duncan wrote: > Hey folks, I understand most of what is going on with the applicative > class, but I can't figure out why this instance is useful: > "instance Applicative ((->) a) where..." > > Can anyone offer some intuition into how this is could be used? As hinted to in the paper on applicative functors, Applicative programming with effects Conor McBride, Ross Paterson. http://strictlypositive.org/IdiomLite.pdf the instance functors are the S and K combinators. http://en.wikipedia.org/wiki/SKI_combinator_calculus Regards, apfelmus -- http://apfelmus.nfshost.com ------------------------------ Message: 3 Date: Sat, 11 Jul 2009 11:57:10 -0400 From: Patrick LeBoutillier <patrick.leboutill...@gmail.com> Subject: Re: [Haskell-beginners] List.sort To: John Dorsey <hask...@colquitt.org> Cc: beginners@haskell.org Message-ID: <b217a64f0907110857p5bbeb29eif851c846abcac...@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Hi, > Patrick, > >> Ord a => [a] -> [a] >> >> I don't understand how this type can allow it to sort pairs: >> >> Prelude> :m +List >> Prelude List> sort [(1, "1"), (3, "3"), (2, "2")] >> [(1,"1"),(2,"2"),(3,"3")] >> >> How can a pair by of type "Ord a"? Is it a rule that the first element >> is automatically used? > > "Ord a" isn't really the type of a pair... it's a type *constraint* on the > argument to the sort function, which is otherwise any type "a". > > So it means List.sort can be applied to any type "a" which satisfies "Ord a". > But what does that mean? It means that there is an instance for the > typeclass Ord for whatever type is given to Listsort. > > In the case of pairs, it's exactly as you guessed... the leftmost parts are > compared first. This is so because somewhere there's an "instance Ord (a,b)" > that defines how to compare pairs, and it does it that way (left-to-right). > (And this generalizes to tuples bigger than pairs, up to some > compiler-specific limit.) > > Does this make sense? Yes, perfectly. I guess you just have to know about it... :) > > John > > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://www.haskell.org/mailman/listinfo/beginners > -- ===================== Patrick LeBoutillier Rosemère, Québec, Canada ------------------------------ Message: 4 Date: Sat, 11 Jul 2009 19:13:30 +0200 From: Chadda? Fouch? <chaddai.fou...@gmail.com> Subject: Re: [Haskell-beginners] List.sort To: Patrick LeBoutillier <patrick.leboutill...@gmail.com> Cc: beginners@haskell.org Message-ID: <e9350eaf0907111013h146ebd4er6fc8476d9b44...@mail.gmail.com> Content-Type: text/plain; charset=UTF-8 On Sat, Jul 11, 2009 at 5:57 PM, Patrick LeBoutillier<patrick.leboutill...@gmail.com> wrote: >> Does this make sense? > > Yes, perfectly. I guess you just have to know about it... :) > Well, it's the lexicographic order, the most "natural", in any case the most used order for tuples, so it would be strange to have other expectations by default Of course, the mechanism by which this work is interesting by itself. -- Jedaï ------------------------------ Message: 5 Date: Sat, 11 Jul 2009 14:25:34 -0400 From: Patrick LeBoutillier <patrick.leboutill...@gmail.com> Subject: Re: [Haskell-beginners] List.sort To: Chadda? Fouch? <chaddai.fou...@gmail.com> Cc: beginners@haskell.org Message-ID: <b217a64f0907111125w50d66b30k60c0fa69bba4...@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1 On Sat, Jul 11, 2009 at 1:13 PM, Chaddaï Fouché<chaddai.fou...@gmail.com> wrote: > On Sat, Jul 11, 2009 at 5:57 PM, Patrick > LeBoutillier<patrick.leboutill...@gmail.com> wrote: >>> Does this make sense? >> >> Yes, perfectly. I guess you just have to know about it... :) >> > > Well, it's the lexicographic order, the most "natural", in any case > the most used order for tuples, so it would be strange to have other > expectations by default > > Of course, the mechanism by which this work is interesting by itself. Really interesting in fact. It shows how generic these concepts really are. But it wasn't obvious to me that a pair could be an instance of Ord. This kind of gives you a clue: Prelude> :info () data () = () -- Defined in GHC.Unit instance Bounded () -- Defined in GHC.Enum instance Enum () -- Defined in GHC.Enum instance Eq () -- Defined in Data.Tuple instance Ord () -- Defined in Data.Tuple instance Read () -- Defined in GHC.Read instance Show () -- Defined in GHC.Show but is there a way to do the equivalent of: Prelude> :info (a,b) or Prelude> :info (Int,String) ? Patrick > > -- > Jedaï > -- ===================== Patrick LeBoutillier Rosemère, Québec, Canada ------------------------------ Message: 6 Date: Sat, 11 Jul 2009 13:41:04 -0600 From: Geoffrey Marchant <geoffrey.march...@gmail.com> Subject: Re: [Haskell-beginners] List.sort To: Patrick LeBoutillier <patrick.leboutill...@gmail.com> Cc: beginners@haskell.org Message-ID: <79e6290e0907111241p6d778decw3196a94a02a38...@mail.gmail.com> Content-Type: text/plain; charset="iso-8859-1" Try Prelude> :info (,) data (,) a b = (,) a b -- Defined in GHC.Tuple instance (Bounded a, Bounded b) => Bounded (a, b) -- Defined in GHC.Enum instance (Eq a, Eq b) => Eq (a, b) -- Defined in Data.Tuple instance (Ord a, Ord b) => Ord (a, b) -- Defined in Data.Tuple instance (Read a, Read b) => Read (a, b) -- Defined in GHC.Read instance (Show a, Show b) => Show (a, b) -- Defined in GHC.Show On Sat, Jul 11, 2009 at 12:25 PM, Patrick LeBoutillier < patrick.leboutill...@gmail.com> wrote: > On Sat, Jul 11, 2009 at 1:13 PM, Chaddaï Fouché<chaddai.fou...@gmail.com> > wrote: > > On Sat, Jul 11, 2009 at 5:57 PM, Patrick > > LeBoutillier<patrick.leboutill...@gmail.com> wrote: > >>> Does this make sense? > >> > >> Yes, perfectly. I guess you just have to know about it... :) > >> > > > > Well, it's the lexicographic order, the most "natural", in any case > > the most used order for tuples, so it would be strange to have other > > expectations by default > > > > Of course, the mechanism by which this work is interesting by itself. > > Really interesting in fact. It shows how generic these concepts really > are. But it wasn't obvious to me that a pair could be an instance of > Ord. > > This kind of gives you a clue: > > Prelude> :info () > data () = () -- Defined in GHC.Unit > instance Bounded () -- Defined in GHC.Enum > instance Enum () -- Defined in GHC.Enum > instance Eq () -- Defined in Data.Tuple > instance Ord () -- Defined in Data.Tuple > instance Read () -- Defined in GHC.Read > instance Show () -- Defined in GHC.Show > > but is there a way to do the equivalent of: > > Prelude> :info (a,b) > or > Prelude> :info (Int,String) > > ? > > Patrick > > > > > -- > > Jedaï > > > > > > -- > ===================== > Patrick LeBoutillier > Rosemère, Québec, Canada > _______________________________________________ > 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/20090711/b50fca57/attachment-0001.html ------------------------------ Message: 7 Date: Sat, 11 Jul 2009 20:40:10 -0400 From: Keith Sheppard <keiths...@gmail.com> Subject: [Haskell-beginners] external sort To: beginners@haskell.org Message-ID: <92e42b740907111740g18855743kb76fba7434c72...@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1 I'm reworking external sort to meet the needs of my app and I'm running into some trouble that I was hoping to get some advice on. I'm asking a lot of questions here so don't feel obligated to answer them all if you have input on one point: The code is here: http://tinyurl.com/extsort 1) The sort gives the correct result, but when I tried to sort very large files (~4 Gb) I got this message: tssql: /var/folders/Tl/TlS1rTCyFpWU9s-IsNFkdE+++TI/-Tmp-/sort4106.txt: openBinaryFile: resource exhausted (Too many open files) I tried to be careful about limiting the number of open file handles but I must have done something wrong. Do you see where I'm leaking file handles? 2) I'm guessing there's a smarter way to do unwrapMonads? 3) I'd like to create a function like BS.hGetContents which lazily reads the ByteString but in addition to closing the file after the last byte is read I want it to delete the file that I'm reading from. Like hGetContentsThenDelete. It seems like http://hackage.haskell.org/package/lazyio but it isn't clear to me how I would do this I cant do > LazyIO.run $ do > str <- BS.hGetContents file > removeFile file > return str can I? I assume that would close the file too soon 4) Is there any other wacky stuff in my code that I should change? I told you it was a lot :-) Thanks! -Keith -- keithsheppard.name ------------------------------ Message: 8 Date: Sat, 11 Jul 2009 22:59:19 -0300 From: Felipe Lessa <felipe.le...@gmail.com> Subject: Re: [Haskell-beginners] external sort To: beginners@haskell.org Message-ID: <20090712015919.gb23...@kira.casa> Content-Type: text/plain; charset=us-ascii On Sat, Jul 11, 2009 at 08:40:10PM -0400, Keith Sheppard wrote: > 2) I'm guessing there's a smarter way to do unwrapMonads? unwrapMonads is actually sequence :), see [1]. [1] http://hackage.haskell.org/packages/archive/base/latest/doc/html/src/Control-Monad.html#sequence -- Felipe. ------------------------------ _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners End of Beginners Digest, Vol 13, Issue 7 ****************************************