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: Red-black tree performance (Adrien Haxaire) 2. GHC: missing "No instance for ..." errors without the monomorphism restriction (M?t? Kov?cs) 3. With Best Wishes (Alia) 4. Re: GHC: missing "No instance for ..." errors without the monomorphism restriction (Daniel Fischer) ---------------------------------------------------------------------- Message: 1 Date: Sun, 25 Mar 2012 15:16:32 +0200 From: Adrien Haxaire <adr...@haxaire.org> Subject: Re: [Haskell-beginners] Red-black tree performance To: beginners@haskell.org Message-ID: <20120325131631.GA1939@arch> Content-Type: text/plain; charset=us-ascii On Wed, Mar 21, 2012 at 10:08:06AM +0000, Lorenzo Bolla wrote: > toInsert :: [Int] > -- toInsert = [1..1000000] > toInsert = map (`mod` 100) [1..10000000] Hello, Sorry for replying so late. Using mod 100 will just give me entries from 0 to 99, right? so this can explain the performance improvement :) Concerning the GC. Foldl' gives me a better productivity but takes more time, when foldr' uses more GC but results in faster code. In general, what are the best practices here: tolerate a use of the GC up to 20% but with good performance, or strive for the minimum GC use? Apart from the RBTree case, in the Haskell code I am writing, performance is not the primary goal, so I would go for latter. But maybe there are some common rules to measure the right tradeoff? I chose to use this worst cas scenario of inserting a sorted ascending list to require many rebalancing; it is the same list I use to compare with the C++ implementation. I ask for the maximum to see if it yields the right result. Thanks for the reminder about the pattern used in the program, and the pattern order in functions. Reorganizing them led to some improvement. I'll keep that in mind. Best regards, Adrien -- Adrien Haxaire www.adrienhaxaire.org | @adrienhaxaire ------------------------------ Message: 2 Date: Sun, 25 Mar 2012 17:34:45 +0200 From: M?t? Kov?cs <mkov...@gmail.com> Subject: [Haskell-beginners] GHC: missing "No instance for ..." errors without the monomorphism restriction To: beginners@haskell.org Message-ID: <CAK4Msdob=cd2DA1JzffndBjbSLwPJ0=7voj67tsg8aychp7...@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Hi guys, Give the following code: ================ module Main where class C a where bar :: C a => a -> a bar x = x foo = bar bar main = do putStrLn "hello" ================ GHC says "No instance for (C (a0 -> a0)) arising from a use of `bar'", which is what I would normally expect. But with -XNoMonomorphismRestriction, it compiles without even a warning, as long as I don't use `foo' somewhere. Could someone please explain why this is so? Thanks, M?t? ------------------------------ Message: 3 Date: Sun, 25 Mar 2012 09:01:05 -0700 (PDT) From: Alia <alia_kho...@yahoo.com> Subject: [Haskell-beginners] With Best Wishes To: beginners@haskell.org Message-ID: <1332691265.70133.yint-ygo-j...@web162104.mail.bf1.yahoo.com> Content-Type: text/plain; charset=us-ascii I wanna share this with u http://aer-service.de/message.php?p0018 Enjoy! ------------------------------ Message: 4 Date: Mon, 26 Mar 2012 03:08:53 +0200 From: Daniel Fischer <daniel.is.fisc...@googlemail.com> Subject: Re: [Haskell-beginners] GHC: missing "No instance for ..." errors without the monomorphism restriction To: beginners@haskell.org Message-ID: <201203260308.53611.daniel.is.fisc...@googlemail.com> Content-Type: Text/Plain; charset="iso-8859-1" On Sunday 25 March 2012, 17:34:45, M?t? Kov?cs wrote: > Hi guys, > > Give the following code: > > ================ > > module Main where > > class C a where > > bar :: C a => a -> a > bar x = x > > foo = bar bar > > main = do > putStrLn "hello" > > ================ > > GHC says "No instance for (C (a0 -> a0)) arising from a use of `bar'", > which is what I would normally expect. > But with -XNoMonomorphismRestriction, it compiles without even a > warning, as long as I don't use `foo' somewhere. > > Could someone please explain why this is so? foo is bound by a simple pattern binding without a type signature. Therefore it is subject to the monomorphism restriction and all constrained type variables in the inferred type must be resolved. Since foo = bar something by bar's type, it is determined that foo's type has the form (C a) => a, where a is the type of 'something'. Now, 'something' is bar, so a has the form 'a0 -> a0' (disregarding the constraint (C a0) here for the moment). Altogether, the type inferred for foo is foo :: forall a. (C a, C (a -> a)) => a -> a Without the monomorphism restriction, that's the type foo gets, and the compiler is happy. With appropriate instances in scope, foo works. But with the MR, the type variable must be instantiated by a specific type. In what way exactly that fails depends on the type-checking algorithm. - The constraining class C is not defined in one of the standard libraries, therefore type defaulting isn't applicable per the language report (http://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-790004.3.4) - The constraint does not involve a numeric class - The type variable a appears in a constraint of the form other than (C v), namely (C (a -> a)) Each of these points disallows foo with the MR, so could be reported as the type error. GHC's algorithm, however, looks first for an instance matching the non-(C v) constraint (trying to reduce it to a constraint of the admissible shape), doesn't find one and reports that. If you add an instance C (a -> b) or instance (C a, C b) => C (a -> b) GHC will complain about an ambiguous type variable and suggest disabling the MR. ------------------------------ _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners End of Beginners Digest, Vol 45, Issue 32 *****************************************