Re: [Haskell-cafe] modelling C in Haskell ..
Yes, you must write them seperately as something like data A = A Int B data B = B1 Int | B2 Int Int one of the many wonders of Haskell -- it encourages you to split up your code into nice small chunks. Bob On 30 May 2008, at 08:46, Galchin, Vasili wrote: Hello, I don't want to write kludgy Haskell code! typedef struct blah { int val1; union { int val2; struct { int val3; int val4; } } }C_type; question: in Haskell, can I embed definition of the "union" inside of the C typedef, i.e. recursion definition? Or must I have a separate definition for the "union" which I "instantiate" inside the Haskell "typedef", i.e. Haskell "data"? Kind regards, Vasili ___ 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
[Haskell-cafe] modelling C in Haskell ..
Hello, I don't want to write kludgy Haskell code! typedef struct blah { int val1; union { int val2; struct { int val3; int val4; } } }C_type; question: in Haskell, can I embed definition of the "union" inside of the C typedef, i.e. recursion definition? Or must I have a separate definition for the "union" which I "instantiate" inside the Haskell "typedef", i.e. Haskell "data"? Kind regards, Vasili ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] HDBC with SQL Server / OBDC
On Wed, May 28, 2008 at 12:46 AM, Olivier Boudry <[EMAIL PROTECTED]> wrote: > If the calling convention is stdcall on Windows and ccall on other OS then > it should be defined based on the OS. This can be done by updating the .hsc > files to define the calling convention as a "macro" depending on the OS > type. > > #ifdef mingw32_HOST_OS > #let CALLCONV = "stdcall" > #else > #let CALLCONV = "ccall" > #endif > > And the foreign import should use CALLCONV instead of ccall. > > This should make it work on Windows and not break it on Linux. Thanks Olivier, that's neater than I thought. I'll put a patch together. -- Andrew ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: happs install seems to have become very slow since upgrading cabal Re: [Haskell-cafe] test driving cabal install...
At Thu, 29 May 2008 19:19:48 -0700, Thomas Hartman wrote: > > It did finish, but I still feel like this took too long. Facebook does take several minutes to compile and consumes quite a bit of memory while doing it. If you machine does not have atleast 1GB of memory it could be thrashing due to swapping. If you have a relatively modern machine with plenty of RAM, then 15 mins does sound a bit long. There are a few cases where GHC will take a very long time to compile a file. I have only seen that happen on perhaps 2-3 files in 6+ years of using Haskell though, and it all cases, the files contained a lot of autogenerated code (either using Template Haskell, or some other script which generated the code). j. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] appending an element to a list
On Thu, May 29, 2008 at 11:48 PM, Tillmann Rendel <[EMAIL PROTECTED]> wrote: > > > Adrian Neumann wrote: > >> Hello, >> >> I was wondering how expensive appending something to a list really is. Say >> I write >> >> I'd say "longList ++ [5]" stays unevaluated until I consumed the whole >> list and then appending should go in O(1). Similarly when concatenating two >> lists. >> >> Is that true, or am I missing something? >> > > I think that is true and you are missing something: You have to push the > call to ++ through the whole longList while consuming it wholy one element > at a time! So when longList has n elements, you have (n+1) calls of ++, each > returning after O(1) steps. The first n calls return a list with the ++ > pushed down, and the last returns [5]. Summed together, that makes O(n) > actual calls of ++ for one written by the programmer. > > Tillmann > In other words, if you look at the prototype of ++ given in the prelude, it generates a new list with first (length longList) elements same as those of longList, followed by the second list. So when you are accessing elements of (longList ++ s), you are actually accessing the elements of this newly generated list, which are generated as and when you access them, so that by the time you reach the first element of s, you have generated (length longList) elements of the result of ++. > ___ > 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] WebSense doesn't like darcs.haskell.org
--- On Fri, 5/30/08, Benjamin L. Russell <[EMAIL PROTECTED]> wrote: > > > I used to be able to get to darcs.haskell.org > just > > fine, but apparently a > > > /hacking directory was added somewhere, so > WebSense > > put it on the naughty list. > > Heh, unbelievable. As if the type of hacker interested in > DoD attacks Sorry, I meant "DoS" (Denial of Service) attacks. That was a typo. Time to reach for that cup of coffee Benjamin L. Russell ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] test driving cabal install... cabal install and normal install (runghc Setup) don't mix... two package.conf files...
On Thu, May 29, 2008 at 06:11:04PM -0700, Thomas Hartman wrote: > After a little drama with zlib, I managed to get cabal-install installed. > > I then attempted to do > > cabal install HAppS-Server > > since this is a module with a lot of dependencies, and in rapid > development flux, so perenially painful for me to install. > > The result is that I managed to install everything up to HAppS-State, > which I think is the last dependency, but then seemed to hang > indefinitely in the middle of installing HAppS-Server at the end. > > OK, I thought, then perhaps I can do normal runghc Setup.hs after > downloading and unzipping the tar from > > http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HAppS-Server-0.9.2.1 > > However, this resulted in error > > [EMAIL PROTECTED]:~/haskellInstalls/smallInstalls/HAppS-Server-0.9.2.1>runghc > Setup.hs configure > ... > Setup.hs: At least the following dependencies are missing: > HAppS-Data >=0.9.2... > > Strange, because I had just installed that module via cabal-install, > and I could load it in ghci with :m +HappS.Data. 'cabal install' installs packages to your user database by default. However, 'Setup configure' only uses packages from the global database unless the --user flag is passed. > I then ran ghc-pkg and got this strange result that my packages were > broken into two different files. Is this by design? > > ghc-pkg list > /usr/local/lib/ghc-6.8.2/package.conf: > Cabal-1.2.3.0, Cabal-1.3.11, Cabal-1.5.2, DeepArrow-0.2, > > /home/thartman/.ghc/i386-linux-6.8.2/package.conf: > HAppS-Data-0.9.2.1, HAppS-IxSet-0.9.2.1, HAppS-State-0.9.2.1, Yep, this is by design. The first is a global database that will require root access to modify. The second is your user database which you can modify without root access. > I am curious if anybody else is able to install HAppS-Server using > cabal install, and whether they can shed any light on the other isuses > I raised. > > Thomas. I tried building HAppS-server the other day, and had a similar experience. It seems that HAppS uses some incredibly elaborate TH/typeclass hacks that take gobs of resources to compile -- my box actually ran out of memory attempting to build it. Cheers, Spencer Janssen ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] So how do people pronounce 'cabal' around here?
On 29 May 2008, at 10:44 AM, Dan Piponi wrote: On Wed, May 28, 2008 at 6:38 PM, Richard A. O'Keefe <[EMAIL PROTECTED]> wrote: I've always pronounced it k'BAHL, but was surprised to find that the OED only countenances a short second syllable: The reason I originally asked is that American, British and other dialects of English handle French loanwords differently. It's not French: http://en.wikipedia.org/wiki/Cabal jcc ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] reordering pure bindings in monads
On Thursday 29 May 2008, Tim Newsham wrote: > Intuitively it seems like the applicative expression: > >(++) <$> getLine <*> getLine > > should represent the same thing as the more traditional liftM2 > expressions: > >do { x <- getLine; y <- getLine; return ((++) x y) } > > but it seems to me that you cant directly manipulate the first into > the second. I get: > >do x2' <- getLine > x1 <- return ((++) x2') > x2 <- getLine > return (x1 x2) > > the only way I can get from here to the liftM2 definition is if I > treat "x1 <- return ((++) x2')" as "let x1 = (++) x2", and then > allow it to be reordered after the second getLine. Then it is > straightforward to reduce to the liftM2 expression above. > > It seems to me that this is a valid transformation if: > - no side effects, including pattern match errors, can occur > in the let (or x1 <- return ...). > - movement doesnt change the dependencies > - x1 isnt used between the original line and its new position > - there are no new bindings for x2' introduced between the original > line and the new line. > > Did I overlook anything? Do any haskell implementations allow rewrites > like these to occur? Monad laws. Consider the following: do x <- getLine f <- return ((++) x) y <- getLine return (f y) === desugar getLine >>= \x -> return ((++) x) >>= \f -> getLine >>= \y -> return (f y) === return x >>= f = f x getLine >>= \x -> (\f -> getLine >>= \y -> return (f y)) ((++) x) === beta getLine >>= \x -> getLine >>= \y -> return (x ++ y) == resugar do x <- getLine ; y <- getLine ; return (x ++ y) I don't know if GHC does any rewrites based on monad laws (I suspect not), but if you want to prove two such expressions equal, they're the ticket. -- Dan ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] WebSense doesn't like darcs.haskell.org
--- On Fri, 5/30/08, Magnus Therning <[EMAIL PROTECTED]> wrote: > > I used to be able to get to darcs.haskell.org just > fine, but apparently a > > /hacking directory was added somewhere, so WebSense > put it on the naughty list. Heh, unbelievable. As if the type of hacker interested in DoD attacks (properly actually called a "cracker," but not a "hacker") would put related files in a directory actually labelled "/hacking." I'm not a hacker in that sense, but if I were, I would call such a directory something innocuous, such as "/misc." Perhaps now we need to consider renaming "Hackage" (http://haskell.org/haskellwiki/Hackage)? ;-) Benjamin L. Russell ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] reordering pure bindings in monads
Intuitively it seems like the applicative expression: (++) <$> getLine <*> getLine should represent the same thing as the more traditional liftM2 expressions: do { x <- getLine; y <- getLine; return ((++) x y) } but it seems to me that you cant directly manipulate the first into the second. I get: do x2' <- getLine x1 <- return ((++) x2') x2 <- getLine return (x1 x2) the only way I can get from here to the liftM2 definition is if I treat "x1 <- return ((++) x2')" as "let x1 = (++) x2", and then allow it to be reordered after the second getLine. Then it is straightforward to reduce to the liftM2 expression above. It seems to me that this is a valid transformation if: - no side effects, including pattern match errors, can occur in the let (or x1 <- return ...). - movement doesnt change the dependencies - x1 isnt used between the original line and its new position - there are no new bindings for x2' introduced between the original line and the new line. Did I overlook anything? Do any haskell implementations allow rewrites like these to occur? Tim Newsham http://www.thenewsh.com/~newsham/ ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] test driving cabal install... cabal install and normal install (runghc Setup) don't mix... two package.conf files...
Excerpts from Thomas Hartman's message of Thu May 29 18:11:04 -0700 2008: > After a little drama with zlib, I managed to get cabal-install installed. > > I then attempted to do > > cabal install HAppS-Server > > since this is a module with a lot of dependencies, and in rapid > development flux, so perenially painful for me to install. > > The result is that I managed to install everything up to HAppS-State, > which I think is the last dependency, but then seemed to hang > indefinitely in the middle of installing HAppS-Server at the end. > > OK, I thought, then perhaps I can do normal runghc Setup.hs after > downloading and unzipping the tar from > > http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HAppS-Server-0.9.2.1 > > However, this resulted in error > > [EMAIL PROTECTED]:~/haskellInstalls/smallInstalls/HAppS-Server-0.9.2.1>ru > nghc > Setup.hs configure > ... > Setup.hs: At least the following dependencies are missing: > HAppS-Data >=0.9.2... > > Strange, because I had just installed that module via cabal-install, > and I could load it in ghci with :m +HappS.Data. > > I then ran ghc-pkg and got this strange result that my packages were > broken into two different files. Is this by design? > > ghc-pkg list > /usr/local/lib/ghc-6.8.2/package.conf: > Cabal-1.2.3.0, Cabal-1.3.11, Cabal-1.5.2, DeepArrow-0.2, > > /home/thartman/.ghc/i386-linux-6.8.2/package.conf: > HAppS-Data-0.9.2.1, HAppS-IxSet-0.9.2.1, HAppS-State-0.9.2.1, > > > I am curious if anybody else is able to install HAppS-Server using > cabal install, and whether they can shed any light on the other isuses > I raised. > > Thomas. I'm having issues trying to get cabal-install (latest darcs) installed, as well. I'm seeing the message: Hackage/Types.hs:19:29: Module `Distribution.Version' does not export `Dependency' which was mentioned on this list earlier. Updating to the latest darcs Cabal doesn't do the trick, it seems: $ ghc-pkg list /usr/local/lib/ghc-6.8.2/package.conf: Cabal-1.3.10, Cabal-1.5.2, ... I grabbed that 1.3.10 as a tarball snapshot. The darcs cabal installs Cabal-1.5.2, and it seemed that the darcs cabal-install wanted >= 1.3.11 && < 1.5, so I've no idea what to do here :) --Philip Neustrom ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] type-level integers using type families
Peter Gavin: Has anyone else tried implementing type-level integers using type families? I tried using a couple of other type level arithmetic libraries (including type-level on Hackage) and they felt a bit clumsy to use. I started looking at type families and realized I could pretty much build an entire Scheme-like language based on them. In short, I've got addition, subtraction, & multiplication working after just a days worth of hacking. I'm going to post the darcs archive sometime, sooner if anyone's interested. I really like the type-families based approach to this, it's a lot easier to understand, and you can think about things functionally instead of relationally. (Switching back and forth between Prolog- ish thinking and Haskell gets old quick.) Plus you can do type arithmetic directly in place, instead of using type classes everywhere. I am glad to hear that type families work for you. One thing that I'd like to be able to do is lazy unification on type instances, so that things like data True data False type family Cond x y z type instance Cond True y z = y type instance Cond False y z = z will work if the non-taken branch can't be unified with anything. Is this planned? Is it even feasible? I don't think i entirely understand the question. Do you mean that from an equality like Cond b Int Bool ~ Int you want the type checker to infer that (b ~ True)? This is generally not correct reasoning as type families are open; ie, subsequent modules might add data Bogus type instance Bogus y z = Int and now there are two solutions to (Cond b Int Bool ~ Int). Manuel ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] test driving cabal install... cabal install and normal install (runghc Setup) don't mix... two package.conf files...
mistaske, that last comment should have gone on another thread. 2008/5/29 Thomas Hartman <[EMAIL PROTECTED]>: > By the way, it just finally finished. > > I still think it took way too long. > > thomas. > > 2008/5/29 Thomas Hartman <[EMAIL PROTECTED]>: >> I see. I had done >> >> sudo cabal install HAppS-Server >> >> but this just installed with root ownership in my home directory. >> >> I'm now trying with >> >> sudo cabal install --global HAppS-Server >> >> >> 2008/5/29 Daniel Patterson <[EMAIL PROTECTED]>: >>> I think you need to install HAppS-Data etc globally... I'm not sure why >>> locally installed (ie, only your user) packages wouldn't be picked up by >>> runghc >>> Setup.hs'ing, but if they are install system wide it should definitely work. >>> >>> I think it is cabal --global install foo >>> >>> On Thu, 29 May 2008 18:11:04 -0700 >>> "Thomas Hartman" <[EMAIL PROTECTED]> wrote: >>> After a little drama with zlib, I managed to get cabal-install installed. I then attempted to do cabal install HAppS-Server since this is a module with a lot of dependencies, and in rapid development flux, so perenially painful for me to install. The result is that I managed to install everything up to HAppS-State, which I think is the last dependency, but then seemed to hang indefinitely in the middle of installing HAppS-Server at the end. OK, I thought, then perhaps I can do normal runghc Setup.hs after downloading and unzipping the tar from http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HAppS-Server-0.9.2.1 However, this resulted in error [EMAIL PROTECTED]:~/haskellInstalls/smallInstalls/HAppS-Server-0.9.2.1>runghc Setup.hs configure ... Setup.hs: At least the following dependencies are missing: HAppS-Data >=0.9.2... Strange, because I had just installed that module via cabal-install, and I could load it in ghci with :m +HappS.Data. I then ran ghc-pkg and got this strange result that my packages were broken into two different files. Is this by design? ghc-pkg list /usr/local/lib/ghc-6.8.2/package.conf: Cabal-1.2.3.0, Cabal-1.3.11, Cabal-1.5.2, DeepArrow-0.2, /home/thartman/.ghc/i386-linux-6.8.2/package.conf: HAppS-Data-0.9.2.1, HAppS-IxSet-0.9.2.1, HAppS-State-0.9.2.1, I am curious if anybody else is able to install HAppS-Server using cabal install, and whether they can shed any light on the other isuses I raised. Thomas. ___ 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 >>> >> > ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: happs install seems to have become very slow since upgrading cabal Re: [Haskell-cafe] test driving cabal install...
It did finish, but I still feel like this took too long. 2008/5/29 Thomas Hartman <[EMAIL PROTECTED]>: > sudo cabal install --global HAppS-State went fine, and ghc-pkg had > output on just the one (global) file. > > but sudo cabal install --global HAppS-Server is slooow. > > I finally canceled this and did > > sudo runghc Setup.hs build -v3 with the same result: extremely, > extremely slow compile. > > It seems to get hung up one one line: > > src/HAppS/Server/Facebook.hs:416:2: >Warning: Defined but not used: `a' > *** Desugar: >Result size = 52971 > *** Simplify: >Result size = 34350 >Result size = 33980 >Result size = 33972 >Result size = 33972 > *** Specialise: >Result size = 52989 > *** Float out (not lambdas, not constants): >Result size = 55269 > > ... and more and more of same. for 15 minutes now. With verbose output > on at least I can see there is something going on behind the scenes, > but still. > > I don't remember things taking this long to compile before I upgraded > to cabal v1.4... cabal bug? > > cabal --version > cabal-install version 0.4.7 > using version 1.3.11 of the Cabal library > > thomas. > > > > > > 2008/5/29 Thomas Hartman <[EMAIL PROTECTED]>: >> I see. I had done >> >> sudo cabal install HAppS-Server >> >> but this just installed with root ownership in my home directory. >> >> I'm now trying with >> >> sudo cabal install --global HAppS-Server >> >> >> 2008/5/29 Daniel Patterson <[EMAIL PROTECTED]>: >>> I think you need to install HAppS-Data etc globally... I'm not sure why >>> locally installed (ie, only your user) packages wouldn't be picked up by >>> runghc >>> Setup.hs'ing, but if they are install system wide it should definitely work. >>> >>> I think it is cabal --global install foo >>> >>> On Thu, 29 May 2008 18:11:04 -0700 >>> "Thomas Hartman" <[EMAIL PROTECTED]> wrote: >>> After a little drama with zlib, I managed to get cabal-install installed. I then attempted to do cabal install HAppS-Server since this is a module with a lot of dependencies, and in rapid development flux, so perenially painful for me to install. The result is that I managed to install everything up to HAppS-State, which I think is the last dependency, but then seemed to hang indefinitely in the middle of installing HAppS-Server at the end. OK, I thought, then perhaps I can do normal runghc Setup.hs after downloading and unzipping the tar from http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HAppS-Server-0.9.2.1 However, this resulted in error [EMAIL PROTECTED]:~/haskellInstalls/smallInstalls/HAppS-Server-0.9.2.1>runghc Setup.hs configure ... Setup.hs: At least the following dependencies are missing: HAppS-Data >=0.9.2... Strange, because I had just installed that module via cabal-install, and I could load it in ghci with :m +HappS.Data. I then ran ghc-pkg and got this strange result that my packages were broken into two different files. Is this by design? ghc-pkg list /usr/local/lib/ghc-6.8.2/package.conf: Cabal-1.2.3.0, Cabal-1.3.11, Cabal-1.5.2, DeepArrow-0.2, /home/thartman/.ghc/i386-linux-6.8.2/package.conf: HAppS-Data-0.9.2.1, HAppS-IxSet-0.9.2.1, HAppS-State-0.9.2.1, I am curious if anybody else is able to install HAppS-Server using cabal install, and whether they can shed any light on the other isuses I raised. Thomas. ___ 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 >>> >> > ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] test driving cabal install... cabal install and normal install (runghc Setup) don't mix... two package.conf files...
By the way, it just finally finished. I still think it took way too long. thomas. 2008/5/29 Thomas Hartman <[EMAIL PROTECTED]>: > I see. I had done > > sudo cabal install HAppS-Server > > but this just installed with root ownership in my home directory. > > I'm now trying with > > sudo cabal install --global HAppS-Server > > > 2008/5/29 Daniel Patterson <[EMAIL PROTECTED]>: >> I think you need to install HAppS-Data etc globally... I'm not sure why >> locally installed (ie, only your user) packages wouldn't be picked up by >> runghc >> Setup.hs'ing, but if they are install system wide it should definitely work. >> >> I think it is cabal --global install foo >> >> On Thu, 29 May 2008 18:11:04 -0700 >> "Thomas Hartman" <[EMAIL PROTECTED]> wrote: >> >>> After a little drama with zlib, I managed to get cabal-install installed. >>> >>> I then attempted to do >>> >>> cabal install HAppS-Server >>> >>> since this is a module with a lot of dependencies, and in rapid >>> development flux, so perenially painful for me to install. >>> >>> The result is that I managed to install everything up to HAppS-State, >>> which I think is the last dependency, but then seemed to hang >>> indefinitely in the middle of installing HAppS-Server at the end. >>> >>> OK, I thought, then perhaps I can do normal runghc Setup.hs after >>> downloading and unzipping the tar from >>> >>> http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HAppS-Server-0.9.2.1 >>> >>> However, this resulted in error >>> >>> [EMAIL >>> PROTECTED]:~/haskellInstalls/smallInstalls/HAppS-Server-0.9.2.1>runghc >>> Setup.hs configure >>> ... >>> Setup.hs: At least the following dependencies are missing: >>> HAppS-Data >=0.9.2... >>> >>> Strange, because I had just installed that module via cabal-install, >>> and I could load it in ghci with :m +HappS.Data. >>> >>> I then ran ghc-pkg and got this strange result that my packages were >>> broken into two different files. Is this by design? >>> >>> ghc-pkg list >>> /usr/local/lib/ghc-6.8.2/package.conf: >>> Cabal-1.2.3.0, Cabal-1.3.11, Cabal-1.5.2, DeepArrow-0.2, >>> >>> /home/thartman/.ghc/i386-linux-6.8.2/package.conf: >>> HAppS-Data-0.9.2.1, HAppS-IxSet-0.9.2.1, HAppS-State-0.9.2.1, >>> >>> >>> I am curious if anybody else is able to install HAppS-Server using >>> cabal install, and whether they can shed any light on the other isuses >>> I raised. >>> >>> Thomas. >>> ___ >>> 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 >> > ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
happs install seems to have become very slow since upgrading cabal Re: [Haskell-cafe] test driving cabal install...
sudo cabal install --global HAppS-State went fine, and ghc-pkg had output on just the one (global) file. but sudo cabal install --global HAppS-Server is slooow. I finally canceled this and did sudo runghc Setup.hs build -v3 with the same result: extremely, extremely slow compile. It seems to get hung up one one line: src/HAppS/Server/Facebook.hs:416:2: Warning: Defined but not used: `a' *** Desugar: Result size = 52971 *** Simplify: Result size = 34350 Result size = 33980 Result size = 33972 Result size = 33972 *** Specialise: Result size = 52989 *** Float out (not lambdas, not constants): Result size = 55269 ... and more and more of same. for 15 minutes now. With verbose output on at least I can see there is something going on behind the scenes, but still. I don't remember things taking this long to compile before I upgraded to cabal v1.4... cabal bug? cabal --version cabal-install version 0.4.7 using version 1.3.11 of the Cabal library thomas. 2008/5/29 Thomas Hartman <[EMAIL PROTECTED]>: > I see. I had done > > sudo cabal install HAppS-Server > > but this just installed with root ownership in my home directory. > > I'm now trying with > > sudo cabal install --global HAppS-Server > > > 2008/5/29 Daniel Patterson <[EMAIL PROTECTED]>: >> I think you need to install HAppS-Data etc globally... I'm not sure why >> locally installed (ie, only your user) packages wouldn't be picked up by >> runghc >> Setup.hs'ing, but if they are install system wide it should definitely work. >> >> I think it is cabal --global install foo >> >> On Thu, 29 May 2008 18:11:04 -0700 >> "Thomas Hartman" <[EMAIL PROTECTED]> wrote: >> >>> After a little drama with zlib, I managed to get cabal-install installed. >>> >>> I then attempted to do >>> >>> cabal install HAppS-Server >>> >>> since this is a module with a lot of dependencies, and in rapid >>> development flux, so perenially painful for me to install. >>> >>> The result is that I managed to install everything up to HAppS-State, >>> which I think is the last dependency, but then seemed to hang >>> indefinitely in the middle of installing HAppS-Server at the end. >>> >>> OK, I thought, then perhaps I can do normal runghc Setup.hs after >>> downloading and unzipping the tar from >>> >>> http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HAppS-Server-0.9.2.1 >>> >>> However, this resulted in error >>> >>> [EMAIL >>> PROTECTED]:~/haskellInstalls/smallInstalls/HAppS-Server-0.9.2.1>runghc >>> Setup.hs configure >>> ... >>> Setup.hs: At least the following dependencies are missing: >>> HAppS-Data >=0.9.2... >>> >>> Strange, because I had just installed that module via cabal-install, >>> and I could load it in ghci with :m +HappS.Data. >>> >>> I then ran ghc-pkg and got this strange result that my packages were >>> broken into two different files. Is this by design? >>> >>> ghc-pkg list >>> /usr/local/lib/ghc-6.8.2/package.conf: >>> Cabal-1.2.3.0, Cabal-1.3.11, Cabal-1.5.2, DeepArrow-0.2, >>> >>> /home/thartman/.ghc/i386-linux-6.8.2/package.conf: >>> HAppS-Data-0.9.2.1, HAppS-IxSet-0.9.2.1, HAppS-State-0.9.2.1, >>> >>> >>> I am curious if anybody else is able to install HAppS-Server using >>> cabal install, and whether they can shed any light on the other isuses >>> I raised. >>> >>> Thomas. >>> ___ >>> 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 >> > ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] ambiguous constraint errors
On 5/28/08, Evan Laforge <[EMAIL PROTECTED]> wrote: > I have two related questions: > > #1 > > I'm getting some annoying type errors that I don't fully understand, > and wind up having to do a workaround that I don't totally like. > Here's a simplified version of my situation: > > data Ambi m = Ambi { >ambi_monad :: m Int >, ambi_int :: Int >} > > some_ambi :: Monad m => Ambi m > some_ambi = Ambi (return 5) 10 > > ambi_table :: Monad m => [(String, Ambi m)] > ambi_table = [("default", some_ambi)] > > get_int :: String -> Maybe Int > get_int sym = fmap ambi_int (lookup sym ambi_table) > > --- > > get_int produces: >Ambiguous type variable `m' in the constraint: > `Monad m' arising from a use of `ambi_table' at ambi.hs:13:40-49 You can let the caller choose "m": get_int :: Monad m => m () -> String -> Maybe Int get_int _ sym = fmap ambi_int (lookup sym ambi_table) which can be called like so: get_int (error "shouldn't evaluate" :: IO ()) "test" ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] test driving cabal install... cabal install and normal install (runghc Setup) don't mix... two package.conf files...
I see. I had done sudo cabal install HAppS-Server but this just installed with root ownership in my home directory. I'm now trying with sudo cabal install --global HAppS-Server 2008/5/29 Daniel Patterson <[EMAIL PROTECTED]>: > I think you need to install HAppS-Data etc globally... I'm not sure why > locally installed (ie, only your user) packages wouldn't be picked up by > runghc > Setup.hs'ing, but if they are install system wide it should definitely work. > > I think it is cabal --global install foo > > On Thu, 29 May 2008 18:11:04 -0700 > "Thomas Hartman" <[EMAIL PROTECTED]> wrote: > >> After a little drama with zlib, I managed to get cabal-install installed. >> >> I then attempted to do >> >> cabal install HAppS-Server >> >> since this is a module with a lot of dependencies, and in rapid >> development flux, so perenially painful for me to install. >> >> The result is that I managed to install everything up to HAppS-State, >> which I think is the last dependency, but then seemed to hang >> indefinitely in the middle of installing HAppS-Server at the end. >> >> OK, I thought, then perhaps I can do normal runghc Setup.hs after >> downloading and unzipping the tar from >> >> http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HAppS-Server-0.9.2.1 >> >> However, this resulted in error >> >> [EMAIL PROTECTED]:~/haskellInstalls/smallInstalls/HAppS-Server-0.9.2.1>runghc >> Setup.hs configure >> ... >> Setup.hs: At least the following dependencies are missing: >> HAppS-Data >=0.9.2... >> >> Strange, because I had just installed that module via cabal-install, >> and I could load it in ghci with :m +HappS.Data. >> >> I then ran ghc-pkg and got this strange result that my packages were >> broken into two different files. Is this by design? >> >> ghc-pkg list >> /usr/local/lib/ghc-6.8.2/package.conf: >> Cabal-1.2.3.0, Cabal-1.3.11, Cabal-1.5.2, DeepArrow-0.2, >> >> /home/thartman/.ghc/i386-linux-6.8.2/package.conf: >> HAppS-Data-0.9.2.1, HAppS-IxSet-0.9.2.1, HAppS-State-0.9.2.1, >> >> >> I am curious if anybody else is able to install HAppS-Server using >> cabal install, and whether they can shed any light on the other isuses >> I raised. >> >> Thomas. >> ___ >> 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 > ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Question on type synonym definition and language extensions
On Thu, May 29, 2008 at 7:36 PM, Antoine Latter <[EMAIL PROTECTED]> wrote: > I've tried similar things before. You may run into subtle problems later. > > Such as: > > > transpose :: Matrix -> Matrix > > won't expand into the type signature you want it to, I think. > > You probably want that to be equivalent to: > > transpose :: forall m. forall a. forall i. forall n. (Ix i, MArray a > n m, Num i, Num n) => m (a (i,i) n) -> m (a (i,i) n) > > But you'll get: > > transpose :: forall m. forall a. forall i. forall n. (Ix i, MArray a > n m, Num i, Num n) => Matrix -> m (a (i,i) n) > > which means that the first argument must be a polymorphic value, which > isn't very useful. > > Right, this is exactly what I'm getting when creating a transpose function: *Main> :t transpose transpose :: (MArray a Double m) => Matrix Int Double -> m (a (Int, Int) Double) Thanks for sharing your experience. I'll try to stay out of the subtle bugs and keep it verbose but simple. Regards, Olivier. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] test driving cabal install... cabal install and normal install (runghc Setup) don't mix... two package.conf files...
I think you need to install HAppS-Data etc globally... I'm not sure why locally installed (ie, only your user) packages wouldn't be picked up by runghc Setup.hs'ing, but if they are install system wide it should definitely work. I think it is cabal --global install foo On Thu, 29 May 2008 18:11:04 -0700 "Thomas Hartman" <[EMAIL PROTECTED]> wrote: > After a little drama with zlib, I managed to get cabal-install installed. > > I then attempted to do > > cabal install HAppS-Server > > since this is a module with a lot of dependencies, and in rapid > development flux, so perenially painful for me to install. > > The result is that I managed to install everything up to HAppS-State, > which I think is the last dependency, but then seemed to hang > indefinitely in the middle of installing HAppS-Server at the end. > > OK, I thought, then perhaps I can do normal runghc Setup.hs after > downloading and unzipping the tar from > > http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HAppS-Server-0.9.2.1 > > However, this resulted in error > > [EMAIL PROTECTED]:~/haskellInstalls/smallInstalls/HAppS-Server-0.9.2.1>runghc > Setup.hs configure > ... > Setup.hs: At least the following dependencies are missing: > HAppS-Data >=0.9.2... > > Strange, because I had just installed that module via cabal-install, > and I could load it in ghci with :m +HappS.Data. > > I then ran ghc-pkg and got this strange result that my packages were > broken into two different files. Is this by design? > > ghc-pkg list > /usr/local/lib/ghc-6.8.2/package.conf: > Cabal-1.2.3.0, Cabal-1.3.11, Cabal-1.5.2, DeepArrow-0.2, > > /home/thartman/.ghc/i386-linux-6.8.2/package.conf: > HAppS-Data-0.9.2.1, HAppS-IxSet-0.9.2.1, HAppS-State-0.9.2.1, > > > I am curious if anybody else is able to install HAppS-Server using > cabal install, and whether they can shed any light on the other isuses > I raised. > > Thomas. > ___ > 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
[Haskell-cafe] test driving cabal install... cabal install and normal install (runghc Setup) don't mix... two package.conf files...
After a little drama with zlib, I managed to get cabal-install installed. I then attempted to do cabal install HAppS-Server since this is a module with a lot of dependencies, and in rapid development flux, so perenially painful for me to install. The result is that I managed to install everything up to HAppS-State, which I think is the last dependency, but then seemed to hang indefinitely in the middle of installing HAppS-Server at the end. OK, I thought, then perhaps I can do normal runghc Setup.hs after downloading and unzipping the tar from http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HAppS-Server-0.9.2.1 However, this resulted in error [EMAIL PROTECTED]:~/haskellInstalls/smallInstalls/HAppS-Server-0.9.2.1>runghc Setup.hs configure ... Setup.hs: At least the following dependencies are missing: HAppS-Data >=0.9.2... Strange, because I had just installed that module via cabal-install, and I could load it in ghci with :m +HappS.Data. I then ran ghc-pkg and got this strange result that my packages were broken into two different files. Is this by design? ghc-pkg list /usr/local/lib/ghc-6.8.2/package.conf: Cabal-1.2.3.0, Cabal-1.3.11, Cabal-1.5.2, DeepArrow-0.2, /home/thartman/.ghc/i386-linux-6.8.2/package.conf: HAppS-Data-0.9.2.1, HAppS-IxSet-0.9.2.1, HAppS-State-0.9.2.1, I am curious if anybody else is able to install HAppS-Server using cabal install, and whether they can shed any light on the other isuses I raised. Thomas. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Question on type synonym definition and language extensions
2008/5/29 Olivier Boudry <[EMAIL PROTECTED]>: > After some "read, guess, try, error" cycles I came up with this: > > type Matrix = forall m. forall a. forall i. forall n. (Ix i, MArray a n > m, Num i, Num n) => m (a (i,i) n) I've tried similar things before. You may run into subtle problems later. Such as: > transpose :: Matrix -> Matrix won't expand into the type signature you want it to, I think. You probably want that to be equivalent to: transpose :: forall m. forall a. forall i. forall n. (Ix i, MArray a n m, Num i, Num n) => m (a (i,i) n) -> m (a (i,i) n) But you'll get: transpose :: forall m. forall a. forall i. forall n. (Ix i, MArray a n m, Num i, Num n) => Matrix -> m (a (i,i) n) which means that the first argument must be a polymorphic value, which isn't very useful. -Antoine -Antoine ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] zlib, missing zlib.h
On Fri, 2008-05-30 at 01:10 +0200, Marc Weber wrote: > On Thu, May 29, 2008 at 03:51:56PM -0700, Thomas Hartman wrote: > > echo " extra-lib-dirs: ${zlib}/lib" >> zlib.cabal > echo " include-dirs: ${zlib}/include" >> zlib.cabal''; > Try patching the cabal file using something like that. Actually the .cabal file is fine, the machine is probably just missing zlib.h which is in zlib-devel on debian based systems. As don says, Cabal does not currently check that all required .h files and C libs are available at configure time so you bump into them as compile or linker errors. Obviously it should check for these things at configure time and produce more helpful explanations. If anyone wants to implement that for us that'd be a great service. The ticket is here: http://hackage.haskell.org/trac/hackage/ticket/262 Duncan ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] zlib, missing zlib.h
On Thu, May 29, 2008 at 03:51:56PM -0700, Thomas Hartman wrote: echo " extra-lib-dirs: ${zlib}/lib" >> zlib.cabal echo " include-dirs: ${zlib}/include" >> zlib.cabal''; Try patching the cabal file using something like that. Marc ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] zlib, missing zlib.h
You need to install the C zlib library. Cabal is currently unable to warn about missing C library dependencies, but they manifest as undeclared identifiers in .hsc files when that's the case. -- Don tphyahoo: > Tried to install > > http://hackage.haskell.org/cgi-bin/hackage-scripts/package/zlib > > which is required for > > http://darcs.haskell.org/cabal-branches/cabal-1.4 > > which is required for cabal-install. > > Got the following error. apt-get installed zlibc on a stab in the > dark, but same result. advice? > > [EMAIL > PROTECTED]:~/haskellInstalls/smallInstalls/cabal-install/zlib-0.4.0.4>runghc > Setup.hs configure > Configuring zlib-0.4.0.4... > > [EMAIL > PROTECTED]:~/haskellInstalls/smallInstalls/cabal-install/zlib-0.4.0.4>runghc > Setup.hs build &>out > > [EMAIL > PROTECTED]:~/haskellInstalls/smallInstalls/cabal-install/zlib-0.4.0.4>head > out > Preprocessing library zlib-0.4.0.4... > > Stream.hsc:74:18: error: zlib.h: No such file or directory > Stream.hsc: In function 'main': > > Stream.hsc:254:0: > error: 'z_stream' undeclared (first use in this function) > > Stream.hsc:254:0: > error: (Each undeclared identifier is reported only once > [EMAIL PROTECTED]:~/haskellInstalls/smallInstalls/cabal-install/zlib-0.4.0.4> > ___ > 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
[Haskell-cafe] zlib, missing zlib.h
Tried to install http://hackage.haskell.org/cgi-bin/hackage-scripts/package/zlib which is required for http://darcs.haskell.org/cabal-branches/cabal-1.4 which is required for cabal-install. Got the following error. apt-get installed zlibc on a stab in the dark, but same result. advice? [EMAIL PROTECTED]:~/haskellInstalls/smallInstalls/cabal-install/zlib-0.4.0.4>runghc Setup.hs configure Configuring zlib-0.4.0.4... [EMAIL PROTECTED]:~/haskellInstalls/smallInstalls/cabal-install/zlib-0.4.0.4>runghc Setup.hs build &>out [EMAIL PROTECTED]:~/haskellInstalls/smallInstalls/cabal-install/zlib-0.4.0.4>head out Preprocessing library zlib-0.4.0.4... Stream.hsc:74:18: error: zlib.h: No such file or directory Stream.hsc: In function 'main': Stream.hsc:254:0: error: 'z_stream' undeclared (first use in this function) Stream.hsc:254:0: error: (Each undeclared identifier is reported only once [EMAIL PROTECTED]:~/haskellInstalls/smallInstalls/cabal-install/zlib-0.4.0.4> ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Damnit, we need a CPAN.
And who bootstraps the searchpath? --S On Thu, May 29, 2008 at 4:50 PM, Darrin Thompson <[EMAIL PROTECTED]> wrote: > On Thu, May 29, 2008 at 4:31 PM, Thomas Hartman <[EMAIL PROTECTED]> > wrote: > > I've been playing a lot with searchpath lately, for doing happs > > "quickstart" installation as described on happs.org. > > > > Searchpath works great when it works, which usually means -- when the > > module map file is up to date and pointing everywhere to the right > > place. > > > > When the module map file is out of date though, the error messages for > > missing dependencies that you would get from searchpath are not as > > good as the error messages you'd get from a cabal configure. > > > > Makes me wonder if searchpath and a good module map file wouldn't be a > good way to bootstrap cabal-install. > > -- > Darrin > ___ > 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] Question on type synonym definition and language extensions
On Thu, May 29, 2008 at 4:38 PM, Henning Thielemann < [EMAIL PROTECTED]> wrote: > Is > > type Matrix monad array num = monad (array (Int,Int) num) > > ok for you? > Not really what I was looking for but I may end up using it. What I wanted is to hide the Monad and Array and have it inferred from the context of the array STArray or STUArray when run in the ST monad with runST(U)Array, IOArray or IOUArray when used in the IO monad, etc... I'm not sure it's the right thing to do. I may create more troubles than I solve. I was just trying to keep things as generic as possible. Thanks for your reply, Olivier. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Damnit, we need a CPAN.
On Thu, May 29, 2008 at 4:31 PM, Thomas Hartman <[EMAIL PROTECTED]> wrote: > I've been playing a lot with searchpath lately, for doing happs > "quickstart" installation as described on happs.org. > > Searchpath works great when it works, which usually means -- when the > module map file is up to date and pointing everywhere to the right > place. > > When the module map file is out of date though, the error messages for > missing dependencies that you would get from searchpath are not as > good as the error messages you'd get from a cabal configure. > Makes me wonder if searchpath and a good module map file wouldn't be a good way to bootstrap cabal-install. -- Darrin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] WebSense doesn't like darcs.haskell.org
Chad Scherrer wrote: > My work uses WebSense to filter viewable pages - I don't have an option. > > I used to be able to get to darcs.haskell.org just fine, but apparently a > /hacking directory was added somewhere, so WebSense put it on the naughty > list. > > I put in a request for WebSense to review the site; hopefully it will soon be > allowed again. But if not, I'll have to go through lots of red tape, which I'd > really like to avoid. > > I assume/hope this "hacking" is only in the sense of making adjustments to > code. > Is this right? If there's anything involving DoS attacks, etc, I might never > be > able to get to it from work again. > > I get the impression WebSense is relatively widely used. Is anyone else here > having similar trouble? Oh my goodness. Please tell me WebSense isn't _that_ stupid! As if any person who's serious about actually carrying out cyber attacks would store things in a directory named "hacking"... WTF, no wonder it feels like we're losing when the "good guys" assume the "bad guys" have an intelligence comparable to the average vegetable. Sorry for the outburst, this sort of brain dead "security" just really upsets me. /M -- Magnus Therning (OpenPGP: 0xAB4DFBA4) magnus@therning.org Jabber: magnus.therning@gmail.com http://therning.org/magnus What if I don't want to obey the laws? Do they throw me in jail with the other bad monads? -- Daveman signature.asc Description: OpenPGP digital signature ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Question on type synonym definition and language extensions
On Thu, 29 May 2008, Olivier Boudry wrote: Hi all, I'm trying to define a type synonym for 2D MArray instances. The goal is to keep the function signature simple and readable using type `Matrix` instead of something like `(Ix i, MArray a e m) => m (a i e)`. After some "read, guess, try, error" cycles I came up with this: type Matrix = forall m. forall a. forall i. forall n. (Ix i, MArray a n m, Num i, Num n) => m (a (i,i) n) Is type Matrix monad array num = monad (array (Int,Int) num) ok for you? ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] is there some book about haskell and data struct and alg?
Looks like Okasaki moved it over when he relocated to the US Military Academy: http://www.eecs.usma.edu/webs/people/okasaki/pfds-haskell.tar.gz I've fixed it on the wiki. -johnnn On May 29, 2008, at 3:56 AM, Henk-Jan van Tuyl wrote: On Thu, 29 May 2008 05:11:54 +0200, Benjamin L. Russell <[EMAIL PROTECTED] > wrote: Although all the source code for the pdf version (http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf ) of "Purely Functional Data Structures" is provided in Standard ML, not Haskell, I found a broken link to the supposedly equivalent Haskell source code on "Books - HaskellWiki" (http://haskell.org/haskellwiki/Books ): Haskell source code for the book: http://www.cs.columbia.edu/~cdo/pfds-haskell.tar.gz Clicking on this link results in the following error: [...] Without the equivalent Haskell source code, the code must be manually translated from Standard ML into Haskell. Does anybody know why the link is broken, when it may be fixed, and from where the Haskell source code can be currently obtained? It appears that http://www.cs.columbia.edu/~cdo/ does not exist anymore; probably because the owner does not study/work at the university anymore. I fixed the link, it now points to the copy stored in the Wayback Machine ( http://web.archive.org/ ). The new link is: http://web.archive.org/web/2818044004/http:// www.cs.columbia.edu/~cdo/pfds-haskell.tar.gz -- Met vriendelijke groet, 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
[Haskell-cafe] Question on type synonym definition and language extensions
Hi all, I'm trying to define a type synonym for 2D MArray instances. The goal is to keep the function signature simple and readable using type `Matrix` instead of something like `(Ix i, MArray a e m) => m (a i e)`. After some "read, guess, try, error" cycles I came up with this: type Matrix = forall m. forall a. forall i. forall n. (Ix i, MArray a n m, Num i, Num n) => m (a (i,i) n) it requires option -XRank2Types to work. But then I can write my function as: test :: Matrix test = do { a <- newArray ((0,0),(5,8)) 0; writeArray a (0,0) 1; return a } Then I wanted to be able to give the Index and Value types in the type synonym but keep it flexible in terms of which MArray instance is used. I changed it to: type Matrix i n = forall m. forall a. (MArray a n m) => m (a (i,i) n) and the type signature of the test function becomes: test :: Matrix Int Double For this one I had to add an extra -XFlexibleContexts option to build it. It works and I'm quite happy with the look of my new function type signatures, but I'm just wondering if I'm doing something bad or if there is a cleaner/simpler way to define the same type synonym without requiring language extensions. What are the risks associated with using these two language extensions, non compatibility with other compilers or more? Thanks, Olivier. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Damnit, we need a CPAN.
I've been playing a lot with searchpath lately, for doing happs "quickstart" installation as described on happs.org. Searchpath works great when it works, which usually means -- when the module map file is up to date and pointing everywhere to the right place. When the module map file is out of date though, the error messages for missing dependencies that you would get from searchpath are not as good as the error messages you'd get from a cabal configure. Case in point, from #happs irc chat today 18:09:44 ~/MyProject>sp ghc -isrc src/Main.hs --make --run 18:10:16? 18:10:19 /home/thartman/.SearchPath/HAppS/State/Spread.hs:18:17: 18:10:20 Could not find module `Control.Concurrent.Chan.Closeable': 18:10:20 Use -v to see a list of the files searched for. 18:10:30 something need to be pushed? 18:10:30Install hspread. 18:11:06Cabal tells you these sorts of things. 18:11:19sp doesn't really keep track of dependencies. thomas. 2008/5/29 Darrin Thompson <[EMAIL PROTECTED]>: > On Thu, May 29, 2008 at 11:47 AM, Neil Mitchell <[EMAIL PROTECTED]> wrote: >>>, a cabal-inst that can install from darcs (or at least from >>> a local directory) >> >> Yes, that would be lovely! >> > > While we're on the subject, why does searchpath get as little > attention as it does? It seems to work reasonably well for HAppS. > > -- > Darrin > ___ > 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] Copying Arrays
duncan.coutts: > > On Thu, 2008-05-29 at 11:25 -0700, Bryan O'Sullivan wrote: > > Tom Harper wrote: > > > > > Because I'm writing the Unicode-friendly ByteString =p > > > > Perhaps I'm not understanding. Why wouldn't you use ByteString for I/O, > > even if you're writing a different library? After all, ByteString's own > > internals use memcpy. > > Just to clarify Tom's question... > > He's designing a proper Unicode type along the lines of ByteString. > However it does not use a ByteString underneath so we cannot re-use the > IO operations from ByteString, though obviously we can steal ideas. > > The reason we do not want to re-use ByteString as the underlying > representation is because they're not good for short strings and we > expect that for Unicode text (more than arbitrary blobs of binary data) > people will want efficient short strings. > > So instead of using a ForeignPtr to pinned heap memory (read: slow > allocation, lots of fragmentation) we're looking at using unpinned heap > arrays. So that means MutableByteArr# (or STUArray for the first > prototype). > > We cannot use memcpy because it operates on raw pointers but that's no > good for a movable heap object like a ByteArr#. > > So that's the background to the question. > > I think the answer is either that there's a primitive to do this copying > in the GHC.* libs or we'll need to add one. There are these guys, foreign import ccall unsafe "__hscore_memcpy_dst_off" memcpy_baoff_ba :: RawBuffer -> CInt -> RawBuffer -> CSize -> IO (Ptr ()) foreign import ccall unsafe "__hscore_memcpy_dst_off" memcpy_baoff_ptr :: RawBuffer -> CInt -> Ptr a -> CSize -> IO (Ptr ()) type RawBuffer = MutableByteArray# RealWorld ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] ambiguous constraint errors
Evan Laforge wrote: get_int sym = fmap ambi_int (lookup sym ambi_table :: Maybe (Ambi Maybe)) Of you and the type system you're the only one who knows that that value is not used. The type system doesn't use (all) the rules you have in your mind. It follows more simple ones. You judge by values, not only types here. That is, you look at the value of ambi_int and see that it's just 10 in your (value again) some_ambi. You see that it's not ambi_int = (some_return_from_monad ambi_monad) * 3 I'm not totally understanding, but I think you're saying that I could write ambi_int in a way that it still had type "Ambi m -> Int" but depended on the type of 'm'. I guess that makes sense, because it could "run" m internally and return an Int based on the result, which therefore depends on the type of 'm'. It's more obvious with other type classes. e.g. the snd of a value of type (Num a) => (a, Bool) Because what if the record/tuple was: canOverflow = (ridiculous, ridiculous <= 40) ridiculous = 40 ^ 5 Then it depends on whether you pick Int or Integer (or something else) for "a", even if you only look at the Bool. -Isaac ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] ambiguous constraint errors
>> get_int sym = fmap ambi_int (lookup sym ambi_table :: Maybe (Ambi Maybe)) > > Of you and the type system you're the only one who knows that that value is > not used. The type system doesn't use (all) the rules you have in your mind. > It follows more simple ones. > > You judge by values, not only types here. That is, you look at the value of > ambi_int and see that it's just 10 in your (value again) some_ambi. You see > that it's not > > ambi_int = (some_return_from_monad ambi_monad) * 3 I'm not totally understanding, but I think you're saying that I could write ambi_int in a way that it still had type "Ambi m -> Int" but depended on the type of 'm'. I guess that makes sense, because it could "run" m internally and return an Int based on the result, which therefore depends on the type of 'm'. > Also compare with this > > x :: Int > x = "Five" > > main = putStrLn "Hello" > > This program doesn't use x, so the type error would definitely not bother us > at run-time. But it's nevertheless not ignored. Sure, my intuition has much less trouble with that one. It's off topic, but I wonder if there's lazy equivalent for type checkers. I.e. at the value level I could call it 'undefined' which works with any type (since all types include _|_ I guess), and as long as it's not evaluated, there's no problem at runtime. A type level equivalent could have a "type bottom" which represents a type checking failure, but it only affects the results of type functions if they "demand" it. I guess a more appealing direction is to try to make the value system total, not make the type system partial :) And it might destroy separate compilation. >> I've been told this doesn't mean what I expect it to, which is that >> the context constraints propagate up to and unify with the containing >> type (out of curiosity, since it's accepted, what *does* this do? I >> think I read it somewhere once, but now I forget and can't find it). >> And sure enough, using this type doesn't make my type declarations >> have the right contexts. > > Well it means that you can't call any data constructor of this type with > arguments not satisfying those constraints. Effectively it means that you > won't ever have a value of type (Command some m) in your program where the > pair (some,m) doesn't satisfy them. > > However, the type system won't leverage that fact. And when you use a value > of type Command some m somewhere you have to repeat the constraints. > > afaik it is officially considered a Haskell mis-feature. Interesting. Are there any valid uses for data context? If not, is it slated for removal? > Maybe something like > > class MyAlias t1 t2 ... > > instance (Monad some, Monad m, ...) => MyAlias some m ... I see, so sort of like using classes as "class aliases" which can reduce the amount of junk in the context. I think I've seen that convention in use before. [ isaac dupree ] > with {-# LANGUAGE GADTs #-} you should be able to use a different syntax for > the same sort of thing but with the meaning you wanted: (beware of layout > messed up by e-mail line wrapping) : > data Command some m where > Command :: (Monad some, Monad m) => some (State.StateT () m Status) -> > Command some m Interesting, I'll have to try that out. > It's a really annoying problem! The multi-param-type-class hack Daniil > Elovkov mentioned is another way it's done sometimes, that also uses a few > compiler extensions. CPP macros are even uglier but they can work too. I guess I'll just type them out explicitly, and add "automatic context propagation" to my ghc wishlist, along with records and srcloc_annotate, and other random stuff. I'm not even sure what such a feature would look like, or if it would be feasible though... Thanks for the pointers! ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re[2]: [Haskell-cafe] Copying Arrays
Hello Duncan, Thursday, May 29, 2008, 10:57:02 PM, you wrote: > We cannot use memcpy because it operates on raw pointers but that's no > good for a movable heap object like a ByteArr#. it's false assumption - memcpy is used for copying non-pinned arrays as in the code from Data.Array.Base i've citated. the idea is that GC shouldn't occur between getting array address and actual memcpy call. you may consult Simon Marlow -- Best regards, Bulatmailto:[EMAIL PROTECTED] ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Damnit, we need a CPAN.
On Thu, 2008-05-29 at 17:38 +0200, Achim Schneider wrote: > No, wait, there's cabal-install. And it doesn't even depend on 20+ > packages I'd have to install manually. My day, for now, is saved, at > least if portage installs it without hesitation. > > Ah, there it is: > >>> Compiling source > >>> in /var/tmp/portage/dev-haskell/cabal-darcs-0/work/cabal-darcs-0 ... > * Bootstrapping Cabal... > > : can't find file: Setup.lhs > * > * ERROR: dev-haskell/cabal-darcs-0 failed. The ebuild for the darcs version of Cabal it out of date. This happens frequently with *-darcs ebuilds because upstream changes. > http://hackage.haskell.org/packages/archive/cabal-install/0.4.0/cabal-install-0.4.0.tar.gz This version is unfortunately far far too old. I cannot upload a new version to hackage until I release Cabal-1.4 which it depends on. Fortunately I'll be releasing both soonish and in the mean time you can try the darcs versions or the pre-release tarballs from a few weeks ago. > Building works, installing too, but registering fails: the Makefile > does not seem to like --user: > > % runhaskell Setup.lhs register --user > -=-= Cabal executing: make register=-=- > cat config/wxcore.pkg | sed -e > "s|\${wxhlibdir}|/home/ksf/cabal-inst/lib|" | ghc-pkg update - Reading > package info from stdin ... done. WARNING: unversioned dependencies are > deprecated, and will NOT be accepted by GHC 6.10: base haskell98 Unable > to rename "/usr/lib64/ghc-6.8.2/package.conf" to > "/usr/lib64/ghc-6.8.2/package.conf.old" Saving old package config > file... ghc-pkg.bin: /usr/lib64/ghc-6.8.2/package.conf: renameFile: > permission denied (Permission denied) The wx package seems to be broken. It is registering directly with ghc-pkg and not respecting the --user flag. This is because it uses make rather than the build infrastructure that Cabal provides. Not that I can blame it for that, it's a pretty complex package and Cabal doesn't yet provide all the features it needs. Gtk2Hs is not cabalised yet either. > Just a second... > # emerge wxhaskell -pv > > These are the packages that would be merged, in order: > > Calculating dependencies... done! > [ebuild UD] dev-lang/ghc-6.4.2 [6.8.2] USE="X%* doc opengl%* > -binary -ghcbootstrap -openal% -test%(-bash-completion%)" 0 kB [0=>1] > [ebuild N] dev-haskell/wxhaskell-0.9.4 USE="doc" 0 kB > > > In other words: No way. The only program that touches anything in /usr/ > is portage. It's trying to downgrade ghc because the version of wxhaskell in portage only works with ghc-6.4.2 and not 6.6 or 6.8. > Rationale: We need a CPAN, a cabal that is smart enough to know what to > to, even if building depends on make, grapefruit authors that commit > to hackage, a cabal-inst that can install from darcs (or at least from > a local directory) It can build from a local directory. Being able to build from darcs is possible in principle but we've not implemented it yet. > , or maybe just a make-replacement for haskell, like > java has with ant (which is really cool if you successfully do not > notice the xml-syntax). We're doing something like that as a Google Summer of Code project this summer. > I would already shut up if there were an ebuild generator, but then I'm > not that egoistic ;) There is. It's called hackport. We use it to generate most of the 100's of Haskell ebuilds that you find in the haskell overlay. So I fully appreciate this packaging stuff is sometimes frustrating. I hope you appreciate that it is actually improving. BTW, if you have specific bugs to report in Cabal, cabal-install or hackage (ie hackage itself, not problems with packages in hackage) then please do report them in our bug tracker: http://hackage.haskell.org/trac/hackage/ You'll also find links there to the darcs versions of Cabal and cabal-install if you want to play with them. Duncan ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Re: WebSense doesn't like darcs.haskell.org
Duncan Coutts worc.ox.ac.uk> writes: > On Thu, 2008-05-29 at 18:12 +, Chad Scherrer wrote: >> I used to be able to get to darcs.haskell.org just fine, but apparently a >> /hacking directory was added somewhere, so WebSense put it on the naughty >> list. > Do you know where? Neil suggested it might be http://darcs.haskell.org/ghc/HACKING but that's been there for a long time, hasn't it? Maybe it's not that a new directory was added, but that WebSense hadn't ever indexed haskell.org before? Chad ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] WebSense doesn't like darcs.haskell.org
Hi > Do you know where? > > [EMAIL PROTECTED]:~$ locate hacking try locate HACKING Google has the answer (as always): http://www.google.co.uk/search?q=allinurl:hacking+site:darcs.haskell.org&hl=en&filter=0 Thanks Neil PS. Google trivia: switching the allinurl and site arguments around means it doesn't find anything. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Aren't type system extensions fun? [Further analysis]
foo :: (Char -> a /\ Bool -> b) -> (a,b) a.k.a. find some value that matches both Char->a and Bool->b for some a and b. Could use type-classes to do it. Uhmm... you mean something like (neglecting TC-related issues here) class C a b where fromChar :: Char -> a fromBool :: Bool -> b Oops: i meant something like class C x a b | x -> a,b where fromChar :: x -> Char -> a fromBool :: x -> Bool -> b no... let me figure out what I meant. Just somehow to have a single function that takes an argument of two different types without completely ignoring it. class Arg a where whatYouPass :: a -> Something instance Arg Char where whatYouPass = ... instance Arg Bool where whatYouPass = ... Then (foo whatYouPass) :: (Something, Something). Or if it was class Arg a where whatYouPass :: a -> a then (foo whatYouPass) :: (Char, Bool). And I'm sure there are ways to make the return type different if you want to think about FDs etc. Zun. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Re: Copying Arrays
On Thu 2008-05-29 18:45, Chad Scherrer wrote: > Jed Brown 59A2.org> writes: > > Uh, ByteString is Unicode-agnostic. ByteString.Char8 is not. So why not > > do IO > > with lazy ByteString and parse into your own representation (which might > > look a > > lot like StorableVector)? > > One problem you might run into doing it this way is if a wide character is > split > between two different arrays. In that case you have to do some post-porcessing > to put the pieces back together. More efficient, I think, if you could force a > given alignment when reading in the lazy bytestring. But there's not a way to > do > that, is there? Unless you are reading UTF-32, you won't know what alignment you want until you get there. If I remember correctly, the default block size is nicely aligned so that in practice you shouldn't have to worry about a chunk ending with weird alignment. However, such alignment issues shouldn't affect you unless you are using the internal interface. If you want fast indexing, you have to parse one character at a time anyway so you won't gain anything by unsafe casting (or memcpy) into your data structure. Jed pgplLsacGH5xc.pgp Description: PGP signature ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] WebSense doesn't like darcs.haskell.org
On Thu, 2008-05-29 at 18:12 +, Chad Scherrer wrote: > My work uses WebSense to filter viewable pages - I don't have an option. > > I used to be able to get to darcs.haskell.org just fine, but apparently a > /hacking directory was added somewhere, so WebSense put it on the naughty > list. Do you know where? [EMAIL PROTECTED]:~$ locate hacking There are some hits in /usr/share/doc but they're not on any of the websites that monk serves. Duncan ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Copying Arrays
On Thu, 2008-05-29 at 11:25 -0700, Bryan O'Sullivan wrote: > Tom Harper wrote: > > > Because I'm writing the Unicode-friendly ByteString =p > > Perhaps I'm not understanding. Why wouldn't you use ByteString for I/O, > even if you're writing a different library? After all, ByteString's own > internals use memcpy. Just to clarify Tom's question... He's designing a proper Unicode type along the lines of ByteString. However it does not use a ByteString underneath so we cannot re-use the IO operations from ByteString, though obviously we can steal ideas. The reason we do not want to re-use ByteString as the underlying representation is because they're not good for short strings and we expect that for Unicode text (more than arbitrary blobs of binary data) people will want efficient short strings. So instead of using a ForeignPtr to pinned heap memory (read: slow allocation, lots of fragmentation) we're looking at using unpinned heap arrays. So that means MutableByteArr# (or STUArray for the first prototype). We cannot use memcpy because it operates on raw pointers but that's no good for a movable heap object like a ByteArr#. So that's the background to the question. I think the answer is either that there's a primitive to do this copying in the GHC.* libs or we'll need to add one. Duncan ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] WebSense doesn't like darcs.haskell.org
Hi > I assume/hope this "hacking" is only in the sense of making adjustments to > code. > Is this right? If there's anything involving DoS attacks, etc, I might never > be > able to get to it from work again. Yes, darcs.haskell.org won't be hosting DoS attacks ever. Perhaps the problem is with this document: http://darcs.haskell.org/ghc/HACKING There are at least 6 branches of that document, and removing them all would be a fair bit of work. Perhaps you can take a very big clue stick and beat the WebSense developers until they cry? I've had a website be incorrectly marked as a phishing site previously, by Norton, and simply submitting the URL to them using a web form on their site resulted in it getting put back on the safe list after a couple of days. Thanks Neil ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Re: Copying Arrays
Jed Brown 59A2.org> writes: > Uh, ByteString is Unicode-agnostic. ByteString.Char8 is not. So why not do > IO > with lazy ByteString and parse into your own representation (which might look > a > lot like StorableVector)? One problem you might run into doing it this way is if a wide character is split between two different arrays. In that case you have to do some post-porcessing to put the pieces back together. More efficient, I think, if you could force a given alignment when reading in the lazy bytestring. But there's not a way to do that, is there? I hope this makes sense. It's the problem I ran into when I tried once to use lazy bytestrings instead of a storable vector, reasoning that the more recent fusion work in bytestring would give a speed boost. But then I was doing numerical stuff, and I don't know much about unicode. Chad ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Copying Arrays
On Thu 2008-05-29 19:19, Tom Harper wrote: > > Why not just read it into a lazy ByteString? Are you looking to use an > > array with elements of a different type? You could then convert it to a > > strict ByteString. > > > Because I'm writing the Unicode-friendly ByteString =p Uh, ByteString is Unicode-agnostic. ByteString.Char8 is not. So why not do IO with lazy ByteString and parse into your own representation (which might look a lot like StorableVector)? Jed pgpCfBIxeQ4l0.pgp Description: PGP signature ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Copying Arrays
Tom Harper wrote: > Because I'm writing the Unicode-friendly ByteString =p Perhaps I'm not understanding. Why wouldn't you use ByteString for I/O, even if you're writing a different library? After all, ByteString's own internals use memcpy. http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Copying Arrays
> Why not just read it into a lazy ByteString? Are you looking to use an > array with elements of a different type? You could then convert it to a > strict ByteString. > > Because I'm writing the Unicode-friendly ByteString =p -- Tom Harper MSc Computer Science '08 University of Oxford Mobile: +44 (0)7533 998 591 Skype: +1 949 273 4627 (harpertom) ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] appending an element to a list
Adrian Neumann wrote: Hello, I was wondering how expensive appending something to a list really is. Say I write I'd say "longList ++ [5]" stays unevaluated until I consumed the whole list and then appending should go in O(1). Similarly when concatenating two lists. Is that true, or am I missing something? I think that is true and you are missing something: You have to push the call to ++ through the whole longList while consuming it wholy one element at a time! So when longList has n elements, you have (n+1) calls of ++, each returning after O(1) steps. The first n calls return a list with the ++ pushed down, and the last returns [5]. Summed together, that makes O(n) actual calls of ++ for one written by the programmer. Tillmann ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] WebSense doesn't like darcs.haskell.org
My work uses WebSense to filter viewable pages - I don't have an option. I used to be able to get to darcs.haskell.org just fine, but apparently a /hacking directory was added somewhere, so WebSense put it on the naughty list. I put in a request for WebSense to review the site; hopefully it will soon be allowed again. But if not, I'll have to go through lots of red tape, which I'd really like to avoid. I assume/hope this "hacking" is only in the sense of making adjustments to code. Is this right? If there's anything involving DoS attacks, etc, I might never be able to get to it from work again. I get the impression WebSense is relatively widely used. Is anyone else here having similar trouble? Chad ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] So how do people pronounce 'cabal' around here?
On Wed, May 28, 2008 at 6:38 PM, Richard A. O'Keefe <[EMAIL PROTECTED]> wrote: > I've always pronounced it k'BAHL, but was surprised to find that > the OED only countenances a short second syllable: The reason I originally asked is that American, British and other dialects of English handle French loanwords differently. Americans put stress towards the end and lengthen the final vowel; Brits typically do the opposite. -- Dan ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] appending an element to a list
Hi, Am Donnerstag, den 29.05.2008, 19:04 +0200 schrieb Adrian Neumann: > I was wondering how expensive appending something to a list really is. > Say I write > > I'd say "longList ++ [5]" stays unevaluated until I consumed the whole > list and then appending should go in O(1). Similarly when concatenating > two lists. > > Is that true, or am I missing something? I’m no expert, but I give it shot: The problem is that longList might be referenced somewhere else as well, so it has to be kept around, ending in [], not in [5]. But (longList ++ [5]) also might be referenced somewhere, so you also need to keep that list. Thus you have to copy the whole list structure for the appending (not the values, though). For comparision, with (5:longList), the new list can use the old list unmodified, so nothing has to be copied. You can also observe this in the code for (++): (++) :: [a] -> [a] -> [a] (++) [] ys = ys (++) (x:xs) ys = x : xs ++ ys where you can see that on the right hand side, a totally new list is constructed. In some cases, e.g. when the longList is only referenced there and nowhere else, one might hope that the compiler can optimize this problem away. There is some hope, as I see this in the code: {-# RULES "++"[~1] forall xs ys. xs ++ ys = augment (\c n -> foldr c n xs) ys #-} Maybe some core-literate people can give more information on this? Greetings, Joachim -- Joachim "nomeata" Breitner mail: [EMAIL PROTECTED] | ICQ# 74513189 | GPG-Key: 4743206C JID: [EMAIL PROTECTED] | http://www.joachim-breitner.de/ Debian Developer: [EMAIL PROTECTED] signature.asc Description: Dies ist ein digital signierter Nachrichtenteil ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Aren't type system extensions fun? [Further analysis]
Roberto Zunino wrote: Uhmm... you mean something like (neglecting TC-related issues here) class C a b where fromChar :: Char -> a fromBool :: Bool -> b Oops: i meant something like class C x a b | x -> a,b where fromChar :: x -> Char -> a fromBool :: x -> Bool -> b Zun. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Aren't type system extensions fun? [Further analysis]
Isaac Dupree wrote: foo :: (Char -> a /\ Bool -> b) -> (a,b) a.k.a. find some value that matches both Char->a and Bool->b for some a and b. Could use type-classes to do it. Uhmm... you mean something like (neglecting TC-related issues here) class C a b where fromChar :: Char -> a fromBool :: Bool -> b or some more clever thing? If this can be encoded with method-less classes, I would be quite interested in knowing how. But why, when we can just use standard tuples instead? foo :: (Char -> a , Bool -> b) -> (a,b) This makes the class dictionary explicit. Alas, IIUC we lost type erasure (does that still hold with intersection types?) in this "implementation". Zun. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Copying Arrays
Tom Harper wrote: > I'm trying to implement some file I/O where I can read in a file to an > array, but do so without having to know how much space I will need. Why not just read it into a lazy ByteString? Are you looking to use an array with elements of a different type? You could then convert it to a strict ByteString. http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] appending an element to a list
Hello, I was wondering how expensive appending something to a list really is. Say I write I'd say "longList ++ [5]" stays unevaluated until I consumed the whole list and then appending should go in O(1). Similarly when concatenating two lists. Is that true, or am I missing something? Adrian signature.asc Description: OpenPGP digital signature ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Copying Arrays
Exactly. Someone on the list gave me this example awhile back for reading CSV files. I can process a gigabyte (simple unpack and print to dev/null for IO testing purposes) in about two and a half seconds using this code. import Data.ByteString.Lazy.Char8 as C -- | Read a datafile and turn it into lists of columns readDatafileAndTranspose name = do sheet <- (transpose . map (C.split '\t') . C.lines) `fmap` C.readFile name return $ foldl' go M.empty sheet where go m (x:xs) = M.insert (C.unpack x) xs m 2008/5/29 Adrian Neumann <[EMAIL PROTECTED]>: > Isn't fast IO what ByteStrings where invented for? > > Adrian > > Tom Harper schrieb: >> >> I'm trying to implement some file I/O where I can read in a file to an >> array, but do so without having to know how much space I will need. >> (Before you suggest it, lists are too slow/space consuming.) I was >> thinking that one possible solution is to use a strategy used in >> dynamic arrays, where everytime you run out of space you double the >> capacity of the array. Trouble is, most arrays in Haskell would >> require you to traverse the entire array and copy each individual >> cell, which would make it worthless. >> >> Are there any low-level array types (MutableByteArray#, for example) >> that support a memcpy-like function where I could copy the entire >> array into the new one instead of copying it one value at a time? Is >> there another solution that I'm missing? >> >> > > > > ___ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > > -- I try to take things like a crow; war and chaos don't always ruin a picnic, they just mean you have to be careful what you swallow. -- Jessica Edwards ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Copying Arrays
Isn't fast IO what ByteStrings where invented for? Adrian Tom Harper schrieb: I'm trying to implement some file I/O where I can read in a file to an array, but do so without having to know how much space I will need. (Before you suggest it, lists are too slow/space consuming.) I was thinking that one possible solution is to use a strategy used in dynamic arrays, where everytime you run out of space you double the capacity of the array. Trouble is, most arrays in Haskell would require you to traverse the entire array and copy each individual cell, which would make it worthless. Are there any low-level array types (MutableByteArray#, for example) that support a memcpy-like function where I could copy the entire array into the new one instead of copying it one value at a time? Is there another solution that I'm missing? signature.asc Description: OpenPGP digital signature ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Copying Arrays
Hello Tom, Thursday, May 29, 2008, 8:21:25 PM, you wrote: > Are there any low-level array types (MutableByteArray#, for example) > that support a memcpy-like function yes, MBA# allows to use memcpy. you can find examples of its usage right in the array package, for example: thawSTUArray :: Ix i => UArray i e -> ST s (STUArray s i e) thawSTUArray (UArray l u arr#) = ST $ \s1# -> case sizeofByteArray# arr# of { n# -> case newByteArray# n# s1# of { (# s2#, marr# #) -> case unsafeCoerce# memcpy marr# arr# n# s2# of { (# s3#, () #) -> (# s3#, STUArray l u marr# #) }}} foreign import ccall unsafe "memcpy" memcpy :: MutableByteArray# RealWorld -> ByteArray# -> Int# -> IO () i can give you further explanations if required -- Best regards, Bulatmailto:[EMAIL PROTECTED] ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Copying Arrays
Define too slow, time-consuming? I've dealt with this problem a lot at this point, and I've been able to slurp up CSV files of several gigabytes in the same amount of time as I generally do in C. I have a feeling an array solution is just going to bog you down more, however if you insist, I would also suggest writing your I/O in C and returning a ForeignPtr to something and work from there. -- Jeff On Thu, May 29, 2008 at 12:21 PM, Tom Harper <[EMAIL PROTECTED]> wrote: > I'm trying to implement some file I/O where I can read in a file to an > array, but do so without having to know how much space I will need. > (Before you suggest it, lists are too slow/space consuming.) I was > thinking that one possible solution is to use a strategy used in > dynamic arrays, where everytime you run out of space you double the > capacity of the array. Trouble is, most arrays in Haskell would > require you to traverse the entire array and copy each individual > cell, which would make it worthless. > > Are there any low-level array types (MutableByteArray#, for example) > that support a memcpy-like function where I could copy the entire > array into the new one instead of copying it one value at a time? Is > there another solution that I'm missing? > > > -- > Tom Harper > MSc Computer Science '08 > University of Oxford > Mobile: +44 (0)7533 998 591 > Skype: +1 949 273 4627 (harpertom) > ___ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > -- I try to take things like a crow; war and chaos don't always ruin a picnic, they just mean you have to be careful what you swallow. -- Jessica Edwards ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Copying Arrays
I'm trying to implement some file I/O where I can read in a file to an array, but do so without having to know how much space I will need. (Before you suggest it, lists are too slow/space consuming.) I was thinking that one possible solution is to use a strategy used in dynamic arrays, where everytime you run out of space you double the capacity of the array. Trouble is, most arrays in Haskell would require you to traverse the entire array and copy each individual cell, which would make it worthless. Are there any low-level array types (MutableByteArray#, for example) that support a memcpy-like function where I could copy the entire array into the new one instead of copying it one value at a time? Is there another solution that I'm missing? -- Tom Harper MSc Computer Science '08 University of Oxford Mobile: +44 (0)7533 998 591 Skype: +1 949 273 4627 (harpertom) ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Damnit, we need a CPAN.
> Hackage and Cabal are nice, but a command line tool for automatically > searching Hackage and installing Hackage packages (like the cpan > program, or easy_install) would be nice. Unless I haven't done my > homework and this tool exists... > This tool exists. It is called 'cabal-install'. To try out one of today's new packages: $ cabal update Downloading package list from server 'http://hackage.haskell.org/packages/archive' $ cabal install category-extras Downloading 'category-extras-0.52.1'... Configuring category-extras-0.52.1... Preprocessing library category-extras-0.52.1... Building category-extras-0.52.1... /usr/bin/ar: creating dist/build/libHScategory-extras-0.52.1.a Installing: /home/dons/.cabal/lib/category-extras-0.52.1/ghc-6.8.2 Registering category-extras-0.52.1... Done. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Damnit, we need a CPAN.
Hello Rob, On Thu, May 29, 2008 at 12:05 PM, Rob Hoelz <[EMAIL PROTECTED]> wrote: > Neil Mitchell <[EMAIL PROTECTED]> wrote: > > > Hi > > > > > Rationale: We need a CPAN > > > > We choose to spell CPAN as "Hackage" > > > > >, a cabal that is smart enough to know what to > > > to, even if building depends on make > > > > Why should building depend on make? Shouldn't cabal build stuff for > > us? We need a cabal that is clever enough that we don't need a make. > > > > >, grapefruit authors that commit > > > to hackage > > > > Or someone to help show the grapefruit authors the light. I helped put > > smallcheck on hackage, others have done other packages. Perhaps you > > could do grapefruit? > > > > >, a cabal-inst that can install from darcs (or at least from > > > a local directory) > > > > Yes, that would be lovely! > > > > >, or maybe just a make-replacement for haskell, like > > > java has with ant (which is really cool if you successfully do not > > > notice the xml-syntax). > > > > We have replaced a lot of make with just --make in GHC. Cabal replaces > > more. What more bits of make do you need? If you can say why make is > > still necessary, people may be able to eliminate it. > > > > Thanks > > > > Neil > > ___ > > Haskell-Cafe mailing list > > Haskell-Cafe@haskell.org > > http://www.haskell.org/mailman/listinfo/haskell-cafe > > Hackage and Cabal are nice, but a command line tool for automatically > searching Hackage and installing Hackage packages (like the cpan > program, or easy_install) would be nice. Unless I haven't done my > homework and this tool exists... > > Thanks, > Rob > Try this: cabal update cabal list cabal install For example, cabal update-- updates your list of packages cabal list xml-- searches the list of packages matching the pattern xml cabal install HaXml -- will download and install the package. Is that what you were wanting? :) __ Donnie ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Damnit, we need a CPAN.
Neil Mitchell <[EMAIL PROTECTED]> wrote: > Hi > > > Rationale: We need a CPAN > > We choose to spell CPAN as "Hackage" > > >, a cabal that is smart enough to know what to > > to, even if building depends on make > > Why should building depend on make? Shouldn't cabal build stuff for > us? We need a cabal that is clever enough that we don't need a make. > > >, grapefruit authors that commit > > to hackage > > Or someone to help show the grapefruit authors the light. I helped put > smallcheck on hackage, others have done other packages. Perhaps you > could do grapefruit? > > >, a cabal-inst that can install from darcs (or at least from > > a local directory) > > Yes, that would be lovely! > > >, or maybe just a make-replacement for haskell, like > > java has with ant (which is really cool if you successfully do not > > notice the xml-syntax). > > We have replaced a lot of make with just --make in GHC. Cabal replaces > more. What more bits of make do you need? If you can say why make is > still necessary, people may be able to eliminate it. > > Thanks > > Neil > ___ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe Hackage and Cabal are nice, but a command line tool for automatically searching Hackage and installing Hackage packages (like the cpan program, or easy_install) would be nice. Unless I haven't done my homework and this tool exists... Thanks, Rob ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Damnit, we need a CPAN.
On Thu, May 29, 2008 at 11:47 AM, Neil Mitchell <[EMAIL PROTECTED]> wrote: >>, a cabal-inst that can install from darcs (or at least from >> a local directory) > > Yes, that would be lovely! > While we're on the subject, why does searchpath get as little attention as it does? It seems to work reasonably well for HAppS. -- Darrin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Damnit, we need a CPAN.
Hi > Rationale: We need a CPAN We choose to spell CPAN as "Hackage" >, a cabal that is smart enough to know what to > to, even if building depends on make Why should building depend on make? Shouldn't cabal build stuff for us? We need a cabal that is clever enough that we don't need a make. >, grapefruit authors that commit > to hackage Or someone to help show the grapefruit authors the light. I helped put smallcheck on hackage, others have done other packages. Perhaps you could do grapefruit? >, a cabal-inst that can install from darcs (or at least from > a local directory) Yes, that would be lovely! >, or maybe just a make-replacement for haskell, like > java has with ant (which is really cool if you successfully do not > notice the xml-syntax). We have replaced a lot of make with just --make in GHC. Cabal replaces more. What more bits of make do you need? If you can say why make is still necessary, people may be able to eliminate it. Thanks Neil ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Damnit, we need a CPAN.
No, wait, there's cabal-install. And it doesn't even depend on 20+ packages I'd have to install manually. My day, for now, is saved, at least if portage installs it without hesitation. Ah, there it is: >>> Compiling source >>> in /var/tmp/portage/dev-haskell/cabal-darcs-0/work/cabal-darcs-0 ... * Bootstrapping Cabal... : can't find file: Setup.lhs * * ERROR: dev-haskell/cabal-darcs-0 failed. Ok, let's try it the other way 'round...: % wget \ http://hackage.haskell.org/packages/archive/cabal-install/0.4.0/cabal-install-0.4.0.tar.gz % tar xvzf cabal-install-0.4.0.tar.gz % cd cabal-install-0.4.0 % runhaskell Setup.lhs configure --prefix=/home/ksf/cabal-inst --user Configuring cabal-install-0.4.0... % runhaskell Setup.lhs install Installing: /home/ksf/cabal-inst/bin Setup.lhs: dist/build/cabal/cabal: copyFile: does not exist (No such file or directory) % runhaskell Setup.lhs build Preprocessing executables for cabal-install-0.4.0... Building cabal-install-0.4.0... [...] % runhaskell Setup.lhs install Installing: /home/ksf/cabal-inst/bin % cabal update % cabal install phooey [...] type 'make' to build wxhaskell. type 'make install' to install wxhaskell. type 'make help' to receive help on all other make targets Configure Succeeded. Indeed. It succeeded. Now what? Building and installing by hand, it seems. Building works, installing too, but registering fails: the Makefile does not seem to like --user: % runhaskell Setup.lhs register --user -=-= Cabal executing: make register=-=- cat config/wxcore.pkg | sed -e "s|\${wxhlibdir}|/home/ksf/cabal-inst/lib|" | ghc-pkg update - Reading package info from stdin ... done. WARNING: unversioned dependencies are deprecated, and will NOT be accepted by GHC 6.10: base haskell98 Unable to rename "/usr/lib64/ghc-6.8.2/package.conf" to "/usr/lib64/ghc-6.8.2/package.conf.old" Saving old package config file... ghc-pkg.bin: /usr/lib64/ghc-6.8.2/package.conf: renameFile: permission denied (Permission denied) Just a second... # emerge wxhaskell -pv These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild UD] dev-lang/ghc-6.4.2 [6.8.2] USE="X%* doc opengl%* -binary -ghcbootstrap -openal% -test%(-bash-completion%)" 0 kB [0=>1] [ebuild N] dev-haskell/wxhaskell-0.9.4 USE="doc" 0 kB In other words: No way. The only program that touches anything in /usr/ is portage. Well, at least ghc-pkg update works on a mangled wxcore.pkg. Rationale: We need a CPAN, a cabal that is smart enough to know what to to, even if building depends on make, grapefruit authors that commit to hackage, a cabal-inst that can install from darcs (or at least from a local directory), or maybe just a make-replacement for haskell, like java has with ant (which is really cool if you successfully do not notice the xml-syntax). I would already shut up if there were an ebuild generator, but then I'm not that egoistic ;) Anyway, three hours after wanting to try it out, grapefruit is up and running, and I did not even have to install its dependencies by hand. It seems like grapefruit could benefit from nestable cabal packages, though: It has one big script that installs many packages. You could also call them dependencies. I'm going to shut up now. -- (c) this sig last receiving data processing entity. Inspect headers for past copyright information. All rights reserved. Unauthorised copying, hiring, renting, public performance and/or broadcasting of this signature prohibited. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Bug in parallel GHC runtime?
Don Stewart wrote: Hi, Thanks for the bug report. This should be filed on the GHC bug tracker, http://hackage.haskell.org/trac/ghc/newticket?type=bug And I've forwarded it to the glasgow-haskell-bugs mailing list. Please try with the 6.8.3 RC we just released. I fixed a bug that could be the cause of this. http://www.haskell.org/pipermail/glasgow-haskell-users/2008-May/014814.html Cheers, Simon kolar: Hello all, The attached file was compiled by the following command: ghc -O2 --make -threaded ltest1pl.hs -o alall When run in a sequential mode, I get this result: ./alall Starting ... Lst1: 416665 Lst2: 4166916670 T1: 0m 1.0e-6s 36 End! On the other hand, when run in a threaded mode, I get the following error: ./alall +RTS -N2 Starting ... Lst1: 416665 Lst2: 4166916670 T1: 0m 0.0s Segmentation fault Is it fault of the GHC runtime, or is it something on my side? My machine: uname -a Linux pc 2.6.24-ARCH #1 SMP PREEMPT Sun Mar 30 10:50:22 CEST 2008 x86_64 Intel(R) Core(TM)2 CPU 6600 @ 2.40GHz GenuineIntel GNU/Linux My ghc: ghc --version The Glorious Glasgow Haskell Compilation System, version 6.8.2 Thanks and regards Dusan --import Control.Concurrent --import Control.Concurrent.MVar import System.Time import Control.Parallel.Strategies --import Data.List (foldl') import qualified Data.ByteString as B sumAllSums [] = 0 sumAllSums l@(_:xs) = sumlist 0 l + sumAllSums xs where sumlist res [] = res sumlist sr (v:vs) = sumlist (sr+v) vs wlist2wbs [] = B.pack [] wlist2wbs l@(_:_) = B.pack $ encode l where encode :: Integral a => [Int] -> [a] encode [] = [] encode (x:xs) = if x==0 then 0:0:encode xs else fromIntegral (x `mod` 256) : fromIntegral (x `div` 256) : encode xs main = do putStrLn $ "Starting ..." let lst1 = [0..4] let lst2 = [0..5] let bs1 = wlist2wbs lst1 let bs2 = wlist2wbs lst2 tm1 <- getClockTime let (v1:v2:_) = parMap rnf sumAllSums [lst1,lst2] tm1' <- getClockTime putStrLn ("Lst1: " ++ show v1) putStrLn ("Lst2: " ++ show v2) let tdiff1 = diffClockTimes tm1' tm1 --let tdiff2 = diffClockTimes tm2' tm2 putStrLn $ "T1: " ++ show (tdMin tdiff1) ++ "m " ++ show (fromIntegral(tdSec tdiff1) + fromIntegral(tdPicosec tdiff1)/1e12) ++ "s" --putStrLn $ "T2: " ++ show (tdMin tdiff2) ++ "m " ++ show (fromIntegral(tdSec tdiff2) + fromIntegral(tdPicosec tdiff2)/1e12) ++ "s" putStrLn $ show $ {-ibs1 +-} B.index bs1 9 + B.index bs2 4 {-((bs1 + fromIntegral (B.index bs2 9)) :: Integer)-} putStrLn $ "End!" {- main = do tm1 <- getClockTime putStrLn $ "Starting ... " mv1 <- newEmptyMVar mv2 <- newEmptyMVar t1 <- forkIO (putMVar mv1 $! sumAllSums [0..4]) t2 <- forkIO (putMVar mv2 $! sumAllSums [1..5]) v1 <- takeMVar mv1 v2 <- takeMVar mv2 killThread t1 killThread t2 putStrLn $ "Result: " ++ show (v1+v2) tm2 <- getClockTime let tdiff = diffClockTimes tm2 tm1 putStrLn $ "End! " ++ show (tdMin tdiff) ++ "m " ++ show (fromIntegral(tdSec tdiff) + fromIntegral(tdPicosec tdiff)/1e12) ++ "s" -} ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe ___ Glasgow-haskell-bugs mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Aren't type system extensions fun? [Further analysis]
Another valid type for foo can be done AFAICS with intersection types: foo :: (Char -> a /\ Bool -> b) -> (a,b) But I can not comment about their inference, or usefulness in practice. Again, undecidable :) In fact, I believe that an inference algorithm for intersection types is equivalent to solving the halting problem. Type checking however is decidable, but expensive. a.k.a. find some value that matches both Char->a and Bool->b for some a and b. Could use type-classes to do it. But why, when we can just use standard tuples instead? foo :: (Char -> a , Bool -> b) -> (a,b) Admittedly this function is isomorphic to type (Char,Bool)... but that's a different issue, with the arbitrariness of our choice of example function. -Isaac ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Re: Aren't type system extensions fun? [Further analysis]
Kim-Ee Yeoh <[EMAIL PROTECTED]> wrote: > > > Luke Palmer-2 wrote: > > > > You have now introduced a first-class type function a la dependent > > types, which I believe makes the type system turing complete. This > > does not help the decidability of inference :-) > > > > God does not care about our computational difficulties. He infers > types emp^H^H^H ... uh, as He pleases. > This begs the question: Can God come up with a type He doesn't understand? The answer, it seems, is Mu. -- (c) this sig last receiving data processing entity. Inspect headers for past copyright information. All rights reserved. Unauthorised copying, hiring, renting, public performance and/or broadcasting of this signature prohibited. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: Re: [Haskell-cafe] Aren't type system extensions fun? [Further analysis]
Luke Palmer-2 wrote: > > You have now introduced a first-class type function a la dependent > types, which I believe makes the type system turing complete. This > does not help the decidability of inference :-) > God does not care about our computational difficulties. He infers types emp^H^H^H ... uh, as He pleases. Anyway, the original point of it was semantic. Let's first explore the meaning of "the most general type." Type functions give one answer, intersection types another. -- Kim-Ee (yeoh at cs dot wisc dot edu) -- View this message in context: http://www.nabble.com/Aren%27t-type-system-extensions-fun--tp17479349p17534701.html Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Aren't type system extensions fun? [Further analysis]
On Thu, May 29, 2008 at 01:44:24PM +0200, Roberto Zunino wrote: > Kim-Ee Yeoh wrote: > > > >How about > > foo :: (exists. m :: * -> *. forall a. a -> m a) -> (m Char, m Bool) > > Thank you: I had actually thought about something like that. > > First, the exists above should actually span over the whole type, so it > becomes a forall because (->) is contravariant on its 1st argument: > >foo :: forall m :: * -> * . (forall a. a -> m a) -> (m Char, m Bool) > > This seems to be Haskell+extensions, but note that m above is meant to > be an arbitrary type-level function, and not a type constructor (in > general). So, I am not surprised if undecidability issues arise in type > checking/inference. :-) Type *checking* is still decidable (System Fw is sufficiently powerful to model these types) but type inference now needs higher order unification, which indeed is undecidable. > Another valid type for foo can be done AFAICS with intersection types: > >foo :: (Char -> a /\ Bool -> b) -> (a,b) > > But I can not comment about their inference, or usefulness in practice. Again, undecidable :) In fact, I believe that an inference algorithm for intersection types is equivalent to solving the halting problem. Type checking however is decidable, but expensive. Edsko ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Aren't type system extensions fun? [Further analysis]
Kim-Ee Yeoh wrote: How about foo :: (exists. m :: * -> *. forall a. a -> m a) -> (m Char, m Bool) Thank you: I had actually thought about something like that. First, the exists above should actually span over the whole type, so it becomes a forall because (->) is contravariant on its 1st argument: foo :: forall m :: * -> * . (forall a. a -> m a) -> (m Char, m Bool) This seems to be Haskell+extensions, but note that m above is meant to be an arbitrary type-level function, and not a type constructor (in general). So, I am not surprised if undecidability issues arise in type checking/inference. :-) Another valid type for foo can be done AFAICS with intersection types: foo :: (Char -> a /\ Bool -> b) -> (a,b) But I can not comment about their inference, or usefulness in practice. Regards, Zun. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: Re: [Haskell-cafe] Aren't type system extensions fun? [Further analysis]
On Thu, May 29, 2008 at 9:51 AM, Kim-Ee Yeoh <[EMAIL PROTECTED]> wrote: > Roberto Zunino-2 wrote: >> >> Alas, for code like yours: >>foo = \f -> (f 'J', f True) >> >> there are infinite valid types too: >>(forall a. a -> Int) -> (Int, Int) >>(forall a. a -> Char)-> (Char, Char) >>(forall a. a -> (a,a)) -> ((Char,Char),(Bool,Bool)) >>... >> >> and it is much less clear if a "best", most general type exists at all. >> > > How about > foo :: (exists. m :: * -> *. forall a. a -> m a) -> (m Char, m Bool) > > Not quite Haskell, but seems to cover all of the examples you gave. You have now introduced a first-class type function a la dependent types, which I believe makes the type system turing complete. This does not help the decidability of inference :-) Luke ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] ambiguous constraint errors
Evan Laforge wrote: I have two related questions: #1 I'm getting some annoying type errors that I don't fully understand, and wind up having to do a workaround that I don't totally like. Here's a simplified version of my situation: data Ambi m = Ambi { ambi_monad :: m Int , ambi_int :: Int } some_ambi :: Monad m => Ambi m some_ambi = Ambi (return 5) 10 ambi_table :: Monad m => [(String, Ambi m)] ambi_table = [("default", some_ambi)] get_int :: String -> Maybe Int get_int sym = fmap ambi_int (lookup sym ambi_table) --- get_int produces: Ambiguous type variable `m' in the constraint: `Monad m' arising from a use of `ambi_table' at ambi.hs:13:40-49 So I guess this means I'm not telling it which 'm', so it doesn't know how to resolve the 'return'... but the thing is, I'm not even using that value, so it doesn't matter what it resolves to. So it works if I pick some random monad: get_int sym = fmap ambi_int (lookup sym ambi_table :: Maybe (Ambi Maybe)) Note that I can't leave it as 'Monad m => Ambi m' because I still get an ambiguous type variable complaint. I'm a little disconcerted by having to pick some random dummy monad. Even worse, everything this type touches starts requiring explicit type declarations everywhere. Is there some easier way to do this? #2 This is somewhat related to another issue I've been having, which is that I have some kind of complicated type, e.g. '(SomeMonad some, Monad m) => some (SomethingM m Status)' that I use in a lot of places. It would be a lot less typing and easier to modify later if I wrote a type alias: type Command = (Monad some, Monad m) => some (State.StateT () m Status) but of course, this isn't allowed, since the type variables don't appear on the lhs, and if I put a context there, it's a syntax error. -fglasgow-exts (not sure which extension) allows the above, though I'm not quite sure what it *means*. It also allows type Command some m = (Monad some, Monad m) => some (State.StateT () m Status) which allows the polymorphism in the types to be shared across more of the function that's defined using Command: more opportunity for explicitness. While I can write it with data: data (Monad some, Monad m) => Command some m = Command (some (State.StateT () m Status)) I've been told this doesn't mean what I expect it to, which is that the context constraints propagate up to and unify with the containing type (out of curiosity, since it's accepted, what *does* this do? I think I read it somewhere once, but now I forget and can't find it). And sure enough, using this type doesn't make my type declarations have the right contexts. That Haskell-98 syntax only tells the compiler to break some times when the context isn't met. But you want the compiler to not-break at other times by supplying the information about the context being available when something else requires it. with {-# LANGUAGE GADTs #-} you should be able to use a different syntax for the same sort of thing but with the meaning you wanted: (beware of layout messed up by e-mail line wrapping) : data Command some m where Command :: (Monad some, Monad m) => some (State.StateT () m Status) -> Command some m This might be a better choice than the type synonym actually, since it's in some ways less unpredictable in meaning to the type system (well, again assuming that GHC is the only Haskell implementation that matters to you). So the first problem means that I have to declare types in various inconvenient places, and the second one means that I have to type out all the various class constraints (I can still alias away the non-polymorphic bits), and all my type declarations start looking much more complicated than they are. It's a really annoying problem! The multi-param-type-class hack Daniil Elovkov mentioned is another way it's done sometimes, that also uses a few compiler extensions. CPP macros are even uglier but they can work too. Choose whatever suits you best. None of the solutions that make polymorphism more syntactically convenient will get rid of your ambiguity annoyances, and I'm not sure if the Haskell98 default()ing system is willing to default Monads. -Isaac ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] type-level integers using type families
Peter Gavin wrote: Has anyone else tried implementing type-level integers using type families? I tried using a couple of other type level arithmetic libraries (including type-level on Hackage) and they felt a bit clumsy to use. I started looking at type families and realized I could pretty much build an entire Scheme-like language based on them. In short, I've got addition, subtraction, & multiplication working after just a days worth of hacking. I'm going to post the darcs archive sometime, sooner if anyone's interested. I really like the type-families based approach to this, it's a lot easier to understand, and you can think about things functionally instead of relationally. (Switching back and forth between Prolog-ish thinking and Haskell gets old quick.) Plus you can do type arithmetic directly in place, instead of using type classes everywhere. nice, it's been tried before, etc. etc.. And of course it doesn't work with a released version of GHC, so maybe it's hoping too much that it would be on Hackage. What I was going to say was, see if there is one on hackage, otherwise there should be one there to be polished. But I guess searching haskell-cafe is your man :-) (your way to try to find any. Or the Haskell blogosphere too.) One thing that I'd like to be able to do is lazy unification on type instances, so that things like ... will work if the non-taken branch can't be unified with anything. Is this planned? Is it even feasible? I'm pretty sure it would be possible to implement a Lambda like this, but I'm not seeing it yet. Any ideas? Yeah -- that would be neat but generally tends to lead to undecidability (unless you're really careful making it a lot(?) less useful). That is, potential nontermination in the type inferencer/checker, not just in runtime. Then you'll want it to be well-defined when something is type-level-lazy, so you can reliably write your type-level algorithms. And *that* is bound to be rather difficult to define and to implement and maintain. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: Re: [Haskell-cafe] Aren't type system extensions fun? [Further analysis]
Roberto Zunino-2 wrote: > > Alas, for code like yours: >foo = \f -> (f 'J', f True) > > there are infinite valid types too: >(forall a. a -> Int) -> (Int, Int) >(forall a. a -> Char)-> (Char, Char) >(forall a. a -> (a,a)) -> ((Char,Char),(Bool,Bool)) >... > > and it is much less clear if a "best", most general type exists at all. > How about foo :: (exists. m :: * -> *. forall a. a -> m a) -> (m Char, m Bool) Not quite Haskell, but seems to cover all of the examples you gave. -- Kim-Ee -- View this message in context: http://www.nabble.com/Aren%27t-type-system-extensions-fun--tp17479349p17531238.html Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] is there some book about haskell and data struct and alg?
On Thu, 29 May 2008 05:11:54 +0200, Benjamin L. Russell <[EMAIL PROTECTED]> wrote: Although all the source code for the pdf version (http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf) of "Purely Functional Data Structures" is provided in Standard ML, not Haskell, I found a broken link to the supposedly equivalent Haskell source code on "Books - HaskellWiki" (http://haskell.org/haskellwiki/Books): Haskell source code for the book: http://www.cs.columbia.edu/~cdo/pfds-haskell.tar.gz Clicking on this link results in the following error: [...] Without the equivalent Haskell source code, the code must be manually translated from Standard ML into Haskell. Does anybody know why the link is broken, when it may be fixed, and from where the Haskell source code can be currently obtained? It appears that http://www.cs.columbia.edu/~cdo/ does not exist anymore; probably because the owner does not study/work at the university anymore. I fixed the link, it now points to the copy stored in the Wayback Machine ( http://web.archive.org/ ). The new link is: http://web.archive.org/web/2818044004/http://www.cs.columbia.edu/~cdo/pfds-haskell.tar.gz -- Met vriendelijke groet, 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