[Haskell-cafe] about gSoc ideas
Hi all, I don't know if it is proper to ask about gsoc on this list, tell me if it's not. I find last couple year's gSoc ideas on http://hackage.haskell.org/trac/summer-of-code/report/1, which some of them labeled good/bad or something else. I don't know what's their status now, and I want to ask for advice about the project that really in need by the HASKELL and is suitable for a gSoc project. Any suggestion will be appreciate. Feng Li ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re[2]: Pickling a finite map (Binary + zlib) [was: [Haskell-cafe] Data.Binary poor read performance]
Hello Duncan, Tuesday, February 24, 2009, 5:13:05 AM, you wrote: > That's actually rather surprising. The system time is negligible and the yes, this looks highly suspicious. we use 1.5 seconds for 1.3 mb file, and 0.3 seconds for 0.3 mb file, so it looks like readFile monopolize cpu here, being able to read only 1mb per second. decoding into list of strings (instead of building map) may help to check this assumption -- Best regards, Bulatmailto:bulat.zigans...@gmail.com ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: Pickling a finite map (Binary + zlib) [was: [Haskell-cafe] Data.Binary poor read performance]
On Mon, 2009-02-23 at 17:03 -0800, Don Stewart wrote: > Here's a quick demo using Data.Binary directly. [...] > $ time ./A dict +RTS -K20M > 52848 > "done" > ./A dict +RTS -K20M 1.51s user 0.06s system 99% cpu 1.582 total > > > Ok. So 1.5s to decode a 1.3M Map. There may be better ways to build the Map > since we know the input will be sorted, but > the Data.Binary instance can't do that. [...] > $ time ./A dict.gz > 52848 > "done" > ./A dict.gz 0.28s user 0.03s system 98% cpu 0.310 total > > Interesting. So extracting the Map from a compressed bytestring in memory is > a fair bit faster than loading it > directly, uncompressed from disk. That's actually rather surprising. The system time is negligible and the difference between total and user time does not leave much for time wasted doing i/o. So that's a real difference in user time. So what is going on? We're doing the same amount of binary decoding in each right? We're also allocating the same number of buffers, in fact slightly more in the case that uses compression. The time taken to cat a meg through an Handle using lazy bytestring is nothing. So where is all that time going? Duncan ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Pickling a finite map (Binary + zlib) [was: [Haskell-cafe] Data.Binary poor read performance]
wren: > Neil Mitchell wrote: >> 2) The storage for String seems to be raw strings, which is nice. >> Would I get a substantial speedup by moving to bytestrings instead of >> strings? If I hashed the strings and stored common ones in a hash >> table is it likely to be a big win? > > Bytestrings should help. The big wins in this application are likely to > be cache issues, though the improved memory/GC overhead is nice too. > Here's a quick demo using Data.Binary directly. First, let's read in the dictionary file, and build a big, worst-case finite map of words to their occurence (always 1). import Data.Binary import Data.List import qualified Data.ByteString.Char8 as B import System.Environment import qualified Data.Map as M main = do [f] <- getArgs s <- B.readFile f let m = M.fromList [ (head n, length n) | n <- (group . B.lines $ s) ] encodeFile "dict" m print "done" So that writes a "dict" file with a binary encoded Map ByteString Int. Using ghc -O2 --make for everying. $ time ./A /usr/share/dict/cracklib-small "done" ./A /usr/share/dict/cracklib-small 0.28s user 0.03s system 94% cpu 0.331 total Yields a dictionary file Map: $ du -hs dict 1.3Mdict Now, let's read back in and decode it back to a Map main = do [f] <- getArgs m <- decodeFile f print (M.size (m :: M.Map B.ByteString Int)) print "done" Easy enough: $ time ./A dict +RTS -K20M 52848 "done" ./A dict +RTS -K20M 1.51s user 0.06s system 99% cpu 1.582 total Ok. So 1.5s to decode a 1.3M Map. There may be better ways to build the Map since we know the input will be sorted, but the Data.Binary instance can't do that. Since decode/encode are a nice pure function on lazy bytestrings, we can try a trick of compressing/decompressing the dictionary in memory. Compressing the dictionary: import Data.Binary import Data.List import qualified Data.ByteString.Char8 as B import qualified Data.ByteString.Lazy as L import System.Environment import qualified Data.Map as M import Codec.Compression.GZip main = do [f] <- getArgs s <- B.readFile f let m = M.fromList [ (head n, length n) | n <- (group . B.lines $ s) ] L.writeFile "dict.gz" . compress . encode $ m print "done" Pretty cool, imo, is "compress . encode": $ time ./A /usr/share/dict/cracklib-small "done" ./A /usr/share/dict/cracklib-small 0.38s user 0.02s system 85% cpu 0.470 total Ok. So building a compressed dictionary takes only a bit longer than uncompressed one (zlib is fast), $ du -hs dict.gz 216Kdict.gz Compressed dictionary is much smaller. Let's load it back in and unpickle it: main = do [f] <- getArgs m <- (decode . decompress) `fmap` L.readFile f print (M.size (m :: M.Map B.ByteString Int)) print "done" Also cute. But how does it run: $ time ./A dict.gz 52848 "done" ./A dict.gz 0.28s user 0.03s system 98% cpu 0.310 total Interesting. So extracting the Map from a compressed bytestring in memory is a fair bit faster than loading it directly, uncompressed from disk. Neil, does that give you some ballpark figures to work with? -- Don ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Data.Binary poor read performance
Neil Mitchell wrote: 2) The storage for String seems to be raw strings, which is nice. Would I get a substantial speedup by moving to bytestrings instead of strings? If I hashed the strings and stored common ones in a hash table is it likely to be a big win? Bytestrings should help. The big wins in this application are likely to be cache issues, though the improved memory/GC overhead is nice too. If you have many identical strings then you will save lots by memoizing your strings into Integers, and then serializing that memo table and the integerized version of your data structure. The amount of savings decreases as the number of duplications decrease, though since you don't need the memo table itself you should be able to serialize it in a way that doesn't have much overhead. A refinement on memoization for when you have many partial matches but few total matches, is to chunk the strings into a series of partial matches, which are then integerized. The trick is deciding on how big to make your chunks (which is to say, optimizing the reuse ratio). If you want an industrial solution like this, it may be worth looking into Haskell bindings for SRILM or IRSTLM. Depending on how rough your type signature was, you may also consider using bytestring-trie to replace the Map String portion. For the keys of your map this will give the bytestring optimization as well as prefix sharing. You could also replace the [String] with Trie Pos where Pos gives the position in the list, or Trie() if order is irrelevant. And you could replace [(String,Int)] with Trie (Map Pos Int) or similar depending on whether position is important (thus Trie (Set Int)) or whether you can avoid conflicting Ints for the same String (thus Trie Int). Without knowing more I'm not sure how well Trie [Either (String, Trie Pos) (Trie (Map Pos Int))] will match your use case, but it's worth considering. The one thing of note is that Trie uses patricia trees like IntMap does rather than using balanced trees like Map does. Again, I'm not sure whether the differences will matter for your use case. -- Live well, ~wren ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Need some advice on deploying an app
Hi Henk-Jan, en alweer hartelik bedankt. Since this is the 1st time I have actually developed a product I'm pretty new to this copy-protection-installer-what-not. Actually I didn't even know the right term for what kind of tool I was looking for, only figured that it would propably exist. Right now I found this http://www.softwareshield.com/Home/SoftwareShield_demonstrations.aspx If this lives up to its promise than I'll probably choose this. Thanks Günther Henk-Jan van Tuyl schrieb: On Mon, 23 Feb 2009 21:04:49 +0100, Gü?nther Schmidt wrote: Hi, I've just finished developing my haskell - windows app and am ready to ship it now. I'm using Inno Setup for the installation but need another tool that would wrap my app inside itself and check for valid keys or an expiration date on every start up. Can anyone recommend a good tool for that purpose? Günther Maybe the following page helps: http://paypal-tools-software.qarchive.org/ Or search for: PayPal product activation Let us know what your experiences are, if you find the right software! ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Hac5: April 17-19, Utrecht -- Book Now!
Twelve days ago, we emailed you about a particular event... ~~ The 5th Haskell Hackathon April 17 - 19, 2009 Utrecht, The Netherlands ~~ We have some updated information for you. If you don't want to read the details, then the important points are: * Hotel or hostel accommodation may be hard to come by, so book your room now! * Check out the website for lots of useful information. As I mentioned before, you can find out more about the Hackathon here: http://haskell.org/haskellwiki/Hac5 The site is a wealth of useful information gratefully provided by the Utrecht organizing team. If you haven't seen it recently, check again. In particular, however, we'd like to inform you of some newly obtained information. We unknowingly scheduled the Hackathon on the same weekend as a popular record and CD fair. http://www.recordplanet.nl/ So, not only do you get the chance to hack on projects involving your favorite purely functional programming language, you also have the opportunity to visit "the most impressive record fair of the world." However, this does have some drawbacks... Rooms in hotels and hostels in Utrecht are often notoriously difficult to come by. It's already a crowded city sometimes with too few places to stay (esp. if you want cheap). Therefore, if you've decided to join us or have already registered, we highly recommend booking a room at your earliest convenience. (If you haven't decided to visit Utrecht, then you should hurry up and agree to it already!) For this purpose, we have updated the main Hac5 page with information about accommodations. http://haskell.org/haskellwiki/Hac5#Accommodation We also have a Google map with information about places to stay and transportation. http://haskell.org/haskellwiki/Hac5#Map And finally, don't forget that you can use either the Attendees page, the Hackathon mailing list, or the IRC channel to communicate with other (potential) attendees or the organizers about sharing rooms, finding a place, or anything else. http://haskell.org/haskellwiki/Hac5/Attendees http://haskell.org/mailman/listinfo/hackathon #haskell-hac5 (on freenode) Good luck and happy hacking! == Organizers == Andres Löh, Utrecht University (UU) José Pedro Magalhães, UU Sean Leather, UU Eelco Lempsink, UU + Tupil Chris Eidhof, UU + Tupil ... and more ... ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] memory-efficient data type for Netflix data - UArray Int Int vs UArray Int Word8
Kenneth Hoste wrote: Well, I'm using UArray, but I'm willing to consider other suitable containers... As long as they are memory efficient. :-) The typical usage of a UArray will be getting all it's contents, and converting it to a list to easily manipulate (filter, ...). So, maybe another data type allows me to store the data in a limited amount of memory (which is my main concern now)... Have you considered using spectral (or counting) bloom filters? I know there's a non-spectral version available[1], though I haven't looked at it to see how easily it could be made to count. [1] http://hackage.haskell.org/cgi-bin/hackage-scripts/package/bloomfilter -- Live well, ~wren ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Need some advice on deploying an app
On Tue, Feb 24, 2009 at 7:04 AM, Gü?nther Schmidt wrote: > Hi, > > I've just finished developing my haskell - windows app and am ready to ship > it now. I'm using Inno Setup for the installation but need another tool that > would wrap my app inside itself and check for valid keys or an expiration > date on every start up. > > Can anyone recommend a good tool for that purpose? > > Günther > EXECryptor or TheMida might be good choices, there's also VMProtect for "protecting" certain parts of your code. Jeff ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Need some advice on deploying an app
On Mon, 23 Feb 2009 21:04:49 +0100, Gü?nther Schmidt wrote: Hi, I've just finished developing my haskell - windows app and am ready to ship it now. I'm using Inno Setup for the installation but need another tool that would wrap my app inside itself and check for valid keys or an expiration date on every start up. Can anyone recommend a good tool for that purpose? Günther Maybe the following page helps: http://paypal-tools-software.qarchive.org/ Or search for: PayPal product activation Let us know what your experiences are, if you find the right software! -- Mit freundlichen Grüßen, Henk-Jan van Tuyl -- http://functor.bamikanarie.com http://Van.Tuyl.eu/ -- ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Re: Hoogle and Network.Socket
wren ng thornton wrote: > Though, I think it might be easier to have an icon next to the search > hits, rather than segregating by platform--- since > segregating/sectioning runs counter to relevance ranking. > While OTOH, this approach might rank low-level POSIX/Windoze libraries higher than cross-platform wrappers, which arguably isn't the best way to promote platform-independence. I really do think that "show N more results from platform Foo" and "show N more platform-specific results" is the way to go: clicking them would repeat the search with "(+platform | +all) -cross-platform" tags, which has the benefit of implicitly documenting how to do specific searches: No documentation needed, no GUI if you don't care. -- (c) this sig last receiving data processing entity. Inspect headers for copyright history. All rights reserved. Copying, hiring, renting, performance and/or quoting of this signature prohibited. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Stacking StateTs
Luis O'Shea wrote: One way to do this is to stack two StateTs on top of m. Another way, what might be easier to reason about, is to crush those two layers together and use a tuple for the state: StateT s1 (StateT s2 m) a == StateT (s1,s2) m a Then the only thing you'll have to worry about is making sure the different "clients" only access s1 or s2 as appropriate. One approach to access control is to make a newtype S = (s1,s2) and define a typeclass taking S and returning the different projections of it (e.g. s1 or s2). This way if you needed to add another StateT layer you can just adjust the definition of S and add a new typeclass instance. Similarly if you wanted to rearrange the contents of S. This also works if you want to have different S, S', etc ---even if they share projections--- though you'll need to use MPTCs (or similar) so you can overload on the total state as well as the projections. The downside to the typeclass approach is that you can't have two projections (of the same S) sM and sN which are the same type. If you want that you'll need to newtype one of the projections, manually pass around the projector dictionaries, or similar. -- Live well, ~wren ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Re: Hoogle and Network.Socket
wren ng thornton wrote: Lacking a wiki account, ~wren From HWN: HaskellWiki Accounts. Ashley Yakeley can [12]create a HaskellWiki account for anyone who wants one (account creation has been disabled as a spam-fighting measure). http://article.gmane.org/gmane.comp.lang.haskell.general/16846 Peter ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] IntMap documentation error
In the documentation for Data.IntMap updateMin, a piece of example code both communicates incorrect intuition, and fails to even compile. updateMin :: (a -> a) -> IntMap a -> IntMap a updateMin (\ _ -> Nothing) (fromList [(5,"a"), (3,"b")]) -- code straight from the docs :1:49: Couldn't match expected type `Maybe a' against inferred type `[Char]' In the expression: "a" In the expression: (5, "a") In the first argument of `fromList', namely `[(5, "a"), (3, "b")]' As a side note, the sort of operation implied by the example code was really what I was looking for in the documentation -- but such a method no longer exists in IntMap. ::sad:: Who do I tell this to / how do I ask to get it fixed? Louis Wasserman wasserman.lo...@gmail.com ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Re: Hoogle and Network.Socket
Achim Schneider wrote: Thomas DuBuisson wrote: > I still prefer showing all platform results sorted into separate > sections with headers, but understand that I am in the minority. You aren't alone. Labelling them prominently with POSIX, UNIX, Linux, *BSD, OSX resp. Windoze is a Good Thing: That way, noone has to dig into package docs. "Show N more results specific to platform Foo"-links would be a good idea, too. Indeed, you are not alone. Though, I think it might be easier to have an icon next to the search hits, rather than segregating by platform--- since segregating/sectioning runs counter to relevance ranking. Of course icons clutter things up (though we can be innovative about what "icon" means and use them to colorize text or similar; since we have so few of them). But then there's a whole literature on clustered search engines that we could delve into for UI considerations (clustered-search folks tend to care about such things). The main point is that I think even arch/os/compiler-specific packages should be searched by default and simply annotated as being platform-specific, rather than requiring flags (a hitherto undocumented feature). Cookies should be used to facilitate or suppress such platform specificities (with a URL interface to adjust the cookie). Lacking a wiki account, ~wren ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] advancePtr for ForeignPtr
On Mon, Feb 23, 2009 at 9:02 AM, Judah Jacobson wrote: > On Mon, Feb 23, 2009 at 6:48 AM, Henning Thielemann > wrote: >> >> On Mon, 23 Feb 2009, Felipe Lessa wrote: >> >>> On Mon, Feb 23, 2009 at 10:12 AM, Henning Thielemann >>> wrote: Is still someone on haskell.org ? >>> >>> Sorry, I don't know :). >> >> I meant f...@haskell.org >> Do I have to use 'touchForeignPtr' as finalizer of the subarray's ForeignPtr in order to assert that the superarray lives at least as long as the subarray? >>> >>> This may work, but seems like a fragile hack. Why not >>> >>> >>> data SubArray a = SA {-# UNPACK #-} !(ForeignPtr a) >>> {-# UNPACK #-} !Int >> >> This would work, but I want to convert from StorableVector to CArray and >> StorableVector has an offset parameter, which is missing in CArray. > > I've used something like the following for that purpose: > > advanceForeignPtr :: ForeignPtr a -> Int -> IO (ForeignPtr a) > advanceForeignPtr fp n = withForeignPtr fp $ \p -> >newForeignPtr_ (p `advancePtr` n) Oops, sorry, that's definitely wrong. Probably the only fix is to use touchForeignPtr in the finalizer of the new ForeignPtr, as you said. Time to fix some of my code... :-) -Judah ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] looking for a 2d graphics package
did you look at Hieroglyph? http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Hieroglyph you can also just use GTK2HS / Cairo, or even just OpenGL if you want speed. On Mon, Feb 23, 2009 at 8:46 PM, Martin DeMello wrote: > What 2d graphics library would be the best fit for this sort of thing? > > http://www.superliminal.com/geometry/tyler/gallery/circular/tiles060.html > > I took a look at diagrams but it seemed more geared towards things > that fit on a rectangular layout. > > martin > ___ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Looping after compiling with cabal
I tried to compile with head, but I got the following error messages: [...]\Haskell\GUI\wxHaskell\wxFruit\wxFruit-0.1.2.test>runhaskell Setup configure & runhaskell Setup build & runhaskell Setup install Configuring wxFruit-0.1.2... Preprocessing library wxFruit-0.1.2... Preprocessing executables for wxFruit-0.1.2... Building wxFruit-0.1.2... [1 of 1] Compiling WXFruit ( WXFruit.hs, dist\build\WXFruit.o ) WXFruit.hs:14:0: Bad interface file: [...]\Haskell\GUI\wxHaskell\wxhaskell-0.11.0\lib\imports\Graphics\UI\WX.hi mismatched interface file versions (wanted "610120090216", got "6101") Setup: C:\Program Files\Haskell\doc\wxFruit-0.1.2\.copyFile6036.tmp: copyFile: permission denied (Toegang geweigerd.) What should I do differently? The problem must be http://hackage.haskell.org/trac/ghc/ticket/2722 , I solved the loop by defining id = arr Prelude.id instead of: id = arr id Regards, Henk-Jan van Tuyl -- http://functor.bamikanarie.com http://Van.Tuyl.eu/ -- On Mon, 23 Feb 2009 14:54:01 +0100, Simon Peyton-Jones wrote: I suspect this may be an instance of http://hackage.haskell.org/trac/ghc/ticket/2985 Or (less likely) http://hackage.haskell.org/trac/ghc/ticket/2722 Can you try with the HEAD? Or the 6.10 branch (which includes the fix for #2985)? Simon | -Original Message- | From: haskell-cafe-boun...@haskell.org [mailto:haskell-cafe-boun...@haskell.org] On | Behalf Of Henk-Jan van Tuyl | Sent: 16 February 2009 12:04 | To: Haskell cafe | Subject: [Haskell-cafe] Looping after compiling with cabal | | | L.S., | | I have updated wxFruit to compile with GHC 6.10.1, but when I compil using | the commands: |runhaskell Setup configure & runhaskell Setup build & runhaskell | Setup install | and run paddle.exe, I get the message: |paddle: <> | | If I compile with: |ghc --make paddle | , the game starts normally. | | Any idea how I can solve this? | | Some more data: | Using: |Yampa-0.9.2.3 |wxFruit-0.1.1 from Hackage, updated |GHC 6.10.1 |Windows XP | | Compile sessions: | | [...]\Haskell\GUI\wxHaskell\wxFruit-0.1.1.updated>ghc --make paddle | [1 of 2] Compiling WXFruit ( WXFruit.hs, WXFruit.o ) | [2 of 2] Compiling Main ( paddle.hs, paddle.o ) | Linking paddle.exe ... | | This paddle.exe works fine | | | [...]\Haskell\GUI\wxHaskell\wxFruit-0.1.1.updated>runhaskell Setup | configure & runhaskell Setup build & runhaskell Setup install | Configuring wxFruit-0.1.2... | Preprocessing library wxFruit-0.1.2... | Preprocessing executables for wxFruit-0.1.2... | Building wxFruit-0.1.2... | [1 of 1] Compiling WXFruit ( WXFruit.hs, dist\build\WXFruit.o ) | C:\Programs\ghc\ghc-6.10.1\bin\ar.exe: creating | dist\build\libHSwxFruit-0.1.2.a | [1 of 2] Compiling WXFruit ( WXFruit.hs, | dist\build\paddle\paddle-tmp\WXFruit.o ) | Linking dist\build\paddle\paddle.exe ... | Installing library in C:\Program Files\Haskell\wxFruit-0.1.2\ghc-6.10.1 | Installing executable(s) in C:\Program Files\Haskell\bin | Registering wxFruit-0.1.2... | Reading package info from "dist\\installed-pkg-config" ... done. | Writing new package config file... done. | | [...]\Haskell\GUI\wxHaskell\wxFruit-0.1.1.updated>cd dist\build\paddle | | [...]\Haskell\GUI\wxHaskell\wxFruit-0.1.1.updated\dist\build\paddle>paddle | paddle: <> | | -- | Regards, | Henk-Jan van Tuyl -- ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] memory-efficient data type for Netflix data - UArray Int Int vs UArray Int Word8
On Feb 23, 2009, at 19:57 , Don Stewart wrote: bos: 2009/2/23 Kenneth Hoste Does anyone know why the Word8 version is not significantly better in terms of memory usage? Yes, because there's a typo on line 413 of Data/Array/Vector/Prim/ BUArr.hs. How's that for service? :-) UArray or UArr? Well, I'm using UArray, but I'm willing to consider other suitable containers... As long as they are memory efficient. :-) The typical usage of a UArray will be getting all it's contents, and converting it to a list to easily manipulate (filter, ...). So, maybe another data type allows me to store the data in a limited amount of memory (which is my main concern now)... K. -- Kenneth Hoste ELIS - Ghent University email: kenneth.ho...@elis.ugent.be blog: http://www.elis.ugent.be/~kehoste/blog website: http://www.elis.ugent.be/~kehoste ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Need some advice on deploying an app
Hi, I've just finished developing my haskell - windows app and am ready to ship it now. I'm using Inno Setup for the installation but need another tool that would wrap my app inside itself and check for valid keys or an expiration date on every start up. Can anyone recommend a good tool for that purpose? Günther ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] looking for a 2d graphics package
What 2d graphics library would be the best fit for this sort of thing? http://www.superliminal.com/geometry/tyler/gallery/circular/tiles060.html I took a look at diagrams but it seemed more geared towards things that fit on a rectangular layout. martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Semantic web
> - Original Message > From: Doug Burke > To: Don Stewart ; gregg reynolds > Cc: haskell-cafe@haskell.org > Sent: Friday, February 13, 2009 5:15:44 PM > Subject: Re: [Haskell-cafe] Semantic web > >> - Original Message >> From: Don Stewart >> To: gregg reynolds >> Cc: haskell-cafe@haskell.org >> Sent: Saturday, February 7, 2009 2:40:41 PM >> Subject: Re: [Haskell-cafe] Semantic web >> >> dev: >>> Anybody implementing rdf or owl stuff in haskell? Seems like a natural >>> fit. >> >> http://www.ninebynine.org/RDFNotes/Swish/Intro.html >> >> Needs moving to Hackage. > > There is also > > http://protempore.net/rdf4h/ > > which I haven't used and doesn't look to be particularly active at the moment. > > Doug Of course, there has been a release of this library just after I sent the email. Feb. 13, 2009: version 0.6.1; introduced type classes for RdfSerializer and RdfParser; updated to exploit improvements in newer versions of parsec and other dependent libraries Doug ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] memory-efficient data type for Netflix data - UArray Int Int vs UArray Int Word8
bos: > 2009/2/23 Kenneth Hoste > > > Does anyone know why the Word8 version is not significantly better in > terms > of memory usage? > > > Yes, because there's a typo on line 413 of Data/Array/Vector/Prim/BUArr.hs. > > How's that for service? :-) UArray or UArr? ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Re: Data.Binary poor read performance
ndmitchell: > Hi, > > In an application I'm writing with Data.Binary I'm seeing very fast > write performance (instant), but much slower read performance. Can you > advise where I might be going wrong? Can you try binary 0.5 , just released 20 mins ago? There was definitely some slow downs due to inlining that I've mostly fixed in this release. > The data type I'm serialising is roughly: Map String [Either > (String,[String]) [(String,Int)]] > > A lot of the String's are likely to be identical, and the end file > size is 1Mb. Time taken with ghc -O2 is 0.4 seconds. Map serialisation was sub-optimal. That's been improved today's release. > Various questions/thoughts I've had: > > 1) Is reading a lot slower than writing by necessity? Nope. Shouldn't be. > 2) The storage for String seems to be raw strings, which is nice. > Would I get a substantial speedup by moving to bytestrings instead of > strings? If I hashed the strings and stored common ones in a hash > table is it likely to be a big win? Yep and maybe. > 3) How long might you expect 1Mb to take to read? > > Thanks for the library, its miles faster than the Read/Show I was > using before - but I'm still hoping that reading 1Mb of data can be > instant :-) Tiny fractions of a second. $ cat A.hs import qualified Data.ByteString as B import System.Environment main = do [f] <- getArgs print . B.length =<< B.readFile f $ du -hs /usr/share/dict/cracklib-small 472K/usr/share/dict/cracklib-small $ time ./A /usr/share/dict/cracklib-small 477023 ./A /usr/share/dict/cracklib-small 0.00s user 0.01s system 122% cpu 0.005 total If you're not seeing results like that, with binary 0.5, let's look deeper. -- Don ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] memory-efficient data type for Netflix data - UArray Int Int vs UArray Int Word8
2009/2/23 Kenneth Hoste > Does anyone know why the Word8 version is not significantly better in terms > of memory usage? > Yes, because there's a typo on line 413 of Data/Array/Vector/Prim/BUArr.hs. How's that for service? :-) ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Data.Binary poor read performance
Hi, In an application I'm writing with Data.Binary I'm seeing very fast write performance (instant), but much slower read performance. Can you advise where I might be going wrong? The data type I'm serialising is roughly: Map String [Either (String,[String]) [(String,Int)]] A lot of the String's are likely to be identical, and the end file size is 1Mb. Time taken with ghc -O2 is 0.4 seconds. Various questions/thoughts I've had: 1) Is reading a lot slower than writing by necessity? 2) The storage for String seems to be raw strings, which is nice. Would I get a substantial speedup by moving to bytestrings instead of strings? If I hashed the strings and stored common ones in a hash table is it likely to be a big win? 3) How long might you expect 1Mb to take to read? Thanks for the library, its miles faster than the Read/Show I was using before - but I'm still hoping that reading 1Mb of data can be instant :-) Thanks Neil ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] memory-efficient data type for Netflix data - UArray Int Int vs UArray Int Word8
Hello, I'm having a go at the Netflix Prize using Haskell. Yes, I'm brave. I kind of have an algorithm in mind that I want to implement using Haskell, but up until now, the main issue has been to find a way to efficiently represent the data... For people who are not familiar with the Netflix data, in short, it consist of roughly 100M (1e8) user ratings (1-5, integer) for 17,770 different movies, coming from 480,109 different users. The idea I have in mind requires fast access to all the ratings for a particular user, so I was thinking about an IntMap in terms of user ids, which maps to movie id/rating pairs somehow. To see if I could efficiently represent the data set in this way, I wrote a small Haskell program (attached) which uses the following data type: testMemSizeUArray_UArray_Word8.hs Description: Binary data type data = IntMap (UArray Int Word8) -- map of user IDs to ratings (lacks movie IDs) For convenience, and because I've been discussing this with various people in #haskell @ IRC, the code is also available here: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=1671#a1671 . I'm aware that the way in which the UArray's are constructed (i.e. by adding a single element each time), is far from efficient performance-wise, but that's not the point here... By reformatting the raw data, I can easily read in the data more efficiently. The issue I ran into is that changing the data type to the following, doesn't yield any significant different in memory usage. type data = IntMap (UArray Int Int) -- use Int instead of Word8 for a user rating Someone (dolio) @ #haskell suggested that maybe UArray is not byte packed for Word8, which would cause little difference with a UArray containing Int's, but someone else (dons @ #ghc) was able to tell me it _is_ byte packed. Does anyone know why the Word8 version is not significantly better in terms of memory usage? greetings, Kenneth PS: My adventures on trying to tackle the Netflix Prize problem with Haskell can be followed at http://boegel.kejo.be. -- Kenneth Hoste ELIS - Ghent University email: kenneth.ho...@elis.ugent.be blog: http://www.elis.ugent.be/~kehoste/blog website: http://www.elis.ugent.be/~kehoste ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Fwd: [plt-scheme] Vancouver Lisp Users Group meeting for March 2009 - Haskell for Lisp Programmers
I thought you guys might find this interesting: Haskell for Lisp programmers -- Forwarded message -- From: Bill Clementson Date: Mon, Feb 23, 2009 at 11:12 AM Subject: [plt-scheme] Vancouver Lisp Users Group meeting for March 2009 - Haskell for Lisp Programmers To: undisclosed-recipients Hi all, Haskell is a polymorphically statically typed, lazy, purely functional language based on the lambda calculus. As such, it shares some things in common with some dialects of Lisp but differs in other regards. Our March lispvan speaker will present an introduction to Haskell geared towards Lisp programmers. If you want to read up about Haskell before the meeting, a good starting point is the Haskell Wiki. Here's the "official" meeting notice: Topic: Haskell for Lisp Programmers Presenter: Erik Charlebois Date: Wednesday, March 4th, 2009 Time: 7pm - 10pm (or whenever) Venue: The Hackery, 304 Victoria Dr (entrance off Franklin), Vancouver (see map) Summary: Haskell is a lazy, pure, statically-typed functional programming language enjoying a lot of attention these days. Its strict approach to side effects is seen as one of the viable approaches to making parallel programming tractable. Erik will talk about the core differences between Haskell and Lisp, the actions the Haskell community is taking to manage this growth, and some neat applications of the language already in the wild. * Differences between Haskell and Lisp * Syntax * Static typing * Side effects with monads * The Haskell Platform * Build, Package, Distribute * Community * Haskell Dog and Pony Show Bio: Erik was a compiler developer for 3 years at IBM working on the XL Fortran and C/C++ compilers for the Cell processor. He is currently employed at Slant Six Games doing gameplay programming. For the past 2 years, he has been studying programming languages and databases in a search for smarter ways to build soft real-time applications like games. If possible, I will record the presentation and post it on my blog after the meeting for those who are unable to attend. Join us for a beer (bring your own - there's a fridge) and a chance to learn what static typing and monads are all about! Any updates will be posted on my blog entry for the meeting: http://bc.tech.coop/blog/090223.html -- Bill Clementson _ For list-related administrative tasks: http://list.cs.brown.edu/mailman/listinfo/plt-scheme ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] advancePtr for ForeignPtr
On Mon, Feb 23, 2009 at 6:48 AM, Henning Thielemann wrote: > > On Mon, 23 Feb 2009, Felipe Lessa wrote: > >> On Mon, Feb 23, 2009 at 10:12 AM, Henning Thielemann >> wrote: >>> >>> Is still someone on haskell.org ? >> >> Sorry, I don't know :). > > I meant f...@haskell.org > >>> Do I have to use 'touchForeignPtr' as finalizer of the subarray's >>> ForeignPtr >>> in order to assert that the superarray lives at least as long as the >>> subarray? >> >> This may work, but seems like a fragile hack. Why not >> >> >> data SubArray a = SA {-# UNPACK #-} !(ForeignPtr a) >> {-# UNPACK #-} !Int > > This would work, but I want to convert from StorableVector to CArray and > StorableVector has an offset parameter, which is missing in CArray. I've used something like the following for that purpose: advanceForeignPtr :: ForeignPtr a -> Int -> IO (ForeignPtr a) advanceForeignPtr fp n = withForeignPtr fp $ \p -> newForeignPtr_ (p `advancePtr` n) -Judah ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Haskellers on Twitter!
Modified. Is this how you want it to show? 2009/2/23 Brandon S. Allbery KF8NH > On 2009 Feb 21, at 16:14, Daniel Peebles wrote: > >> http://haskell.org/haskellwiki/Twitter. Please update with yourself or >> any other Haskellers we may have missed. >> > > > Since I can't create an account to fix my entry: > (1) my name is misspelled > (2) partly to synchronize my accounts and partly to try to figure out why > searches for me on http://search.twitter.com fail, I changed my account > name. > > If you're looking to follow me on Twitter, I'm now "geekosaur". (I still > don't show up in searches though. One of many; the folks at Twitter seem to > have trouble with getting their indexes to work right) > > -- > brandon s. allbery [solaris,freebsd,perl,pugs,haskell] allb...@kf8nh.com > system administrator [openafs,heimdal,too many hats] allb...@ece.cmu.edu > electrical and computer engineering, carnegie mellon universityKF8NH > > > > ___ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > > ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Haskellers on Twitter!
On 2009 Feb 21, at 16:14, Daniel Peebles wrote: http://haskell.org/haskellwiki/Twitter. Please update with yourself or any other Haskellers we may have missed. Since I can't create an account to fix my entry: (1) my name is misspelled (2) partly to synchronize my accounts and partly to try to figure out why searches for me on http://search.twitter.com fail, I changed my account name. If you're looking to follow me on Twitter, I'm now "geekosaur". (I still don't show up in searches though. One of many; the folks at Twitter seem to have trouble with getting their indexes to work right) -- brandon s. allbery [solaris,freebsd,perl,pugs,haskell] allb...@kf8nh.com system administrator [openafs,heimdal,too many hats] allb...@ece.cmu.edu electrical and computer engineering, carnegie mellon universityKF8NH PGP.sig Description: This is a digitally signed message part ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Re: [darcs-users] darcs and Google Summer of Code
Am Samstag, 21. Februar 2009 16:18 schrieb Eric Kow: > Hi Wolgang, Hmm, wrong again. ;-) > On Wed, Feb 18, 2009 at 12:53:23 +0100, Wolfgang Jeltsch wrote: > > What do you mean with “something which will make it much easier for third > > parties to write a GUI in the future”? > > Kari's example of GUI-friendly optimisations might be one thought. > > More generally, I was thinking of some kind of darcs library design > work: now that we have exposed all our modules in a sort of darcs > library, how we can grow this into a proper library that people can > "safely" use (safe in the sense that the library makes it very clear > what kinds of operations are read-only, or to what extent operations are > "atomic", preferably with atomic repository-manipulating functions only > being exposed and not their underlying substeps). The library could > also tackle issues like darcs sending messages back to the user (right > now, we just putStrLn, but what if we want them to go a special Window?) Tomorrow, I will discuss with the first half of my student project students (3 students) about what exact topic they will pursue. My idea is to let them start a Grapefruit-based darcs GUI. They should not use the currenct darcs interface directly where it doesn’t fit GUI frontends well. Instead they should write a wrapper around the “ugly” parts which exposes a “nice” interface. Later, one could merge this wrapper into the darcs codebase so that darcs exports the “nice” interface then. The GUI code wouldn’t have to change much then. In April, the second half of the students will start with their project. If there is some graphics support in Grapefruit at that time then they might work on a patch viewer. What do you think about that? Best wishes, Wolfgang ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Re: Hoogle and Network.Socket
Thomas DuBuisson wrote: > I still prefer showing all platform results sorted into separate > sections with headers, but understand that I am in the minority. > You aren't alone. Labelling them prominently with POSIX, UNIX, Linux, *BSD, OSX resp. Windoze is a Good Thing: That way, noone has to dig into package docs. "Show N more results specific to platform Foo"-links would be a good idea, too. -- (c) this sig last receiving data processing entity. Inspect headers for copyright history. All rights reserved. Copying, hiring, renting, performance and/or quoting of this signature prohibited. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] advancePtr for ForeignPtr
On Mon, 23 Feb 2009, Felipe Lessa wrote: On Mon, Feb 23, 2009 at 10:12 AM, Henning Thielemann wrote: Is still someone on haskell.org ? Sorry, I don't know :). I meant f...@haskell.org Do I have to use 'touchForeignPtr' as finalizer of the subarray's ForeignPtr in order to assert that the superarray lives at least as long as the subarray? This may work, but seems like a fragile hack. Why not data SubArray a = SA {-# UNPACK #-} !(ForeignPtr a) {-# UNPACK #-} !Int This would work, but I want to convert from StorableVector to CArray and StorableVector has an offset parameter, which is missing in CArray. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
RE: [Haskell-cafe] Looping after compiling with cabal
I suspect this may be an instance of http://hackage.haskell.org/trac/ghc/ticket/2985 Or (less likely) http://hackage.haskell.org/trac/ghc/ticket/2722 Can you try with the HEAD? Or the 6.10 branch (which includes the fix for #2985)? Simon | -Original Message- | From: haskell-cafe-boun...@haskell.org [mailto:haskell-cafe-boun...@haskell.org] On | Behalf Of Henk-Jan van Tuyl | Sent: 16 February 2009 12:04 | To: Haskell cafe | Subject: [Haskell-cafe] Looping after compiling with cabal | | | L.S., | | I have updated wxFruit to compile with GHC 6.10.1, but when I compil using | the commands: |runhaskell Setup configure & runhaskell Setup build & runhaskell | Setup install | and run paddle.exe, I get the message: |paddle: <> | | If I compile with: |ghc --make paddle | , the game starts normally. | | Any idea how I can solve this? | | Some more data: | Using: |Yampa-0.9.2.3 |wxFruit-0.1.1 from Hackage, updated |GHC 6.10.1 |Windows XP | | Compile sessions: | | [...]\Haskell\GUI\wxHaskell\wxFruit-0.1.1.updated>ghc --make paddle | [1 of 2] Compiling WXFruit ( WXFruit.hs, WXFruit.o ) | [2 of 2] Compiling Main ( paddle.hs, paddle.o ) | Linking paddle.exe ... | | This paddle.exe works fine | | | [...]\Haskell\GUI\wxHaskell\wxFruit-0.1.1.updated>runhaskell Setup | configure & runhaskell Setup build & runhaskell Setup install | Configuring wxFruit-0.1.2... | Preprocessing library wxFruit-0.1.2... | Preprocessing executables for wxFruit-0.1.2... | Building wxFruit-0.1.2... | [1 of 1] Compiling WXFruit ( WXFruit.hs, dist\build\WXFruit.o ) | C:\Programs\ghc\ghc-6.10.1\bin\ar.exe: creating | dist\build\libHSwxFruit-0.1.2.a | [1 of 2] Compiling WXFruit ( WXFruit.hs, | dist\build\paddle\paddle-tmp\WXFruit.o ) | Linking dist\build\paddle\paddle.exe ... | Installing library in C:\Program Files\Haskell\wxFruit-0.1.2\ghc-6.10.1 | Installing executable(s) in C:\Program Files\Haskell\bin | Registering wxFruit-0.1.2... | Reading package info from "dist\\installed-pkg-config" ... done. | Writing new package config file... done. | | [...]\Haskell\GUI\wxHaskell\wxFruit-0.1.1.updated>cd dist\build\paddle | | [...]\Haskell\GUI\wxHaskell\wxFruit-0.1.1.updated\dist\build\paddle>paddle | paddle: <> | | -- | Regards, | Henk-Jan van Tuyl | | | -- | http://functor.bamikanarie.com | http://Van.Tuyl.eu/ | -- | | | ___ | Haskell-Cafe mailing list | Haskell-Cafe@haskell.org | http://www.haskell.org/mailman/listinfo/haskell-cafe ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] The community is more important than the product
On Saturday 21 February 2009 23:59:54 Don Stewart wrote: > http://haskell.org/haskellwiki/Protect_the_community > > Random notes on how to maintain tone, focus and productivity in an > online community I took a few years ago. > > Might be some material there if anyone's seeking to help ensure > we remain a constructive, effective community. Note that you are guilty of most of these charges yourself, most notably from the section "conceit": . won't engage/argue with other positions . makes sweeping claims. . empty statements about a project's success ... When I contested your empty statements about Haskell's success and your sweeping claims, my post was censored and I was banned. I am curious as to why you have changed tack and started trying to justify yourself? Why not just continue to silently ban people? -- Dr Jon Harrop, Flying Frog Consultancy Ltd. http://www.ffconsultancy.com/?e ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] advancePtr for ForeignPtr
On Mon, Feb 23, 2009 at 10:12 AM, Henning Thielemann wrote: > Is still someone on haskell.org ? Sorry, I don't know :). > I want to have an advancePtr on ForeignPtr in order create a subarray. > Is this reasonable and possible? I don't think so. For example, http://www.haskell.org/ghc/docs/latest/html/libraries/bytestring/Data-ByteString-Internal.html#t%3AByteString explicitly list the offset. > Do I have to use 'touchForeignPtr' as finalizer of the subarray's ForeignPtr > in order to assert that the superarray lives at least as long as the > subarray? This may work, but seems like a fragile hack. Why not data SubArray a = SA {-# UNPACK #-} !(ForeignPtr a) {-# UNPACK #-} !Int withSubArray :: SubArray a -> (Ptr a -> IO b) -> IO b withSubArray (SA fptr offset) act = withForeignPtr fptr $ \ptr -> act (ptr `plusPtr` offset) ? HTH, -- Felipe. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Online GHC documentation
Just a small tip: I think it would be nice if GHC online documentation were built with links to the source code, like in hackage. Best, Maurício ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] advancePtr for ForeignPtr
Is still someone on haskell.org ? -- Forwarded message -- Date: Thu, 19 Feb 2009 21:40:08 +0100 (CET) From: Henning Thielemann To: f...@haskell.org Subject: advancePtr for ForeignPtr I want to have an advancePtr on ForeignPtr in order create a subarray. Is this reasonable and possible? Do I have to use 'touchForeignPtr' as finalizer of the subarray's ForeignPtr in order to assert that the superarray lives at least as long as the subarray? Anyway I'd prefer a function in the standard modules than doing such things by myself. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] forall & ST monad
On Fri, Feb 20, 2009 at 11:33 AM, Kim-Ee Yeoh wrote: > Here's a counterexample, regardless of whether you're using > constructive or classical logic, that (forall a. T[a]) -> T' does > not imply exists a. (T[a] -> T'). > > Let a not exist, but T' true. Done. That isn't quite a proper counterexample; if T' is true, that is, you can write a term of type T', then exists a. (T[a] -> T') is trivially true; here's a constructivist proof in Haskell: type T :: * -> * -- given type T' :: * -- given v :: T' v = given type A = () f :: T A -> T' f _ = v data E t t' where E :: forall t t' a. (t a -> t') -> E t t' proof :: E T T' proof = E f It believe that it's true that ((forall a. t a) -> t') does not entail (exists a. t a -> t') in constructivist logic, but I can't come up with a proof off the top of my head. Intuitively, to construct a value of type (E t t') you need to fix an "a", and I don't think it's possible to do so. On the other hand, "a" is hidden, so the only way to call the function inside of E t t' is to pass it something of type (forall a. t a), right? -- ryan ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe