RE: [Haskell-cafe] Re: list choices
Malcolm Wallace wrote: As for Reply-to: munging - I agree that _changing_ an existing header would be bad, but would be very happy if mailing lists were to _introduce_ one on messages where none already existed. That would IMO be the worst of both worlds, as people might use Reply-To for reasons entirely unconnected with the mailing list. So you'd end up with a confusing situation where the default target of replies varied depending on some completely irrelevant factor. Ganesh == Please access the attached hyperlink for an important electronic communications disclaimer: http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html == ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Re: Laws and partial values
On 25 Jan 2009, at 23:36, Daniel Fischer wrote: Why is this obvious - I would argue that it's obvious that bottom *is* () - the data type definition says there's only one value in the type. Any value that I haven't defined yet must be in the set, and it's a single element set, so it *must* be (). It's obvious because () is a defined value, while bottom is not - per definitionem. The matter is that besides the elements declared in the datatype definition, every Haskell type also contains bottom. - I thought that under discussion were the actual Haskell semantics - I'm not so sure about that anymore. If Thomas Davie (Bob) was here discussing an alternative theory in which () is unlifted, the sorry, I completely misunderstood. My argument is that in Haskell as it is, as far as I know, _|_ *is* defined to denote a nonterminating computation, while on the other hand () is an expression in normal form, hence denotes a terminating computation, therefore it is obvious that the two are not the same, as stated by Jake. Of course I may be wrong in my premise, then, if one really cared about obviousness, one would have to put forward a different argument. If you go look through the message history some more, you'll see a couple of emails which convinced me that that indeed was the semantics in haskell, and a follow up saying okay, lets discuss a hypothetical now, because this looks fun and interesting. Bob ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Re: Laws and partial values
Am Montag, 26. Januar 2009 10:28 schrieb Thomas Davie: If you go look through the message history some more, you'll see a couple of emails which convinced me that that indeed was the semantics in haskell, and a follow up saying okay, lets discuss a hypothetical now, because this looks fun and interesting. Bob I missed that part. Sorry for the noise. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] ANN: filestore 0.1
On 26 Jan 2009, at 06:17, carmen wrote: back to the original topic of the thread.. cool project, id be interested ina pure-FS backend as well, Indeed, very cool! Can I make another feature request – generalize how diffs are created, so that I could in theory parse the file contents, and then diff the CSTs rather than diffing text. Bob___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Re: list choices
Malcolm Wallace malcolm.wall...@cs.york.ac.uk writes: The duplicate messages will have the same Message-ID... if they post a message they *want* the reply to go to their main inbox as well as the mailing list folder. Maybe I am just stupid, or maybe my email client is inadequate, If your email doesn't have the option to hide or sort out duplicate messages, another option might be to use procmail - googling for procmail filter duplicates might give you some recipes. As for Reply-to: munging - I agree that _changing_ an existing header would be bad, but would be very happy if mailing lists were to _introduce_ one on messages where none already existed. I've been following many lists who choose to add a Reply-To header, and they invariably get cluttered by mail intended to be private accidentally being posted to the list. Usually it isn't too embarassing, but sometimes it is. I'd err on the side of caution. Of course, the right solution would be for Mailman (or other list processing software) to let subscribers choose individually how to set headers in the email they receive. -k (carefully deleting the @cs.york address from the To field) -- If I haven't seen further, it is by standing in the footprints of giants ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] ANN: filestore 0.1
On Mon, 2009-01-26 at 01:14 +0300, Miguel Mitrofanov wrote: Maybe, we should have another command in cabal-install, something like cabal announce, that would post an announcement to hask...@haskell.org? There is an RSS feed of hackage uploads of course. We could work on making that more informative. Duncan ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Haskell Web Framework
Hi Michael Snoyman, Donnie Jone, I don't think cross posting to web-devel and haskel-cafe is a good idea. Maybe do that but then advice people to either reply to cafe or to web-devel. So I suggest that we continue this discussion on web-devel. First of all there have been some attempts already to provide web frameworks for haskell. If you don't konw WASH yet please do have a look at the examples. I find the idea behind WASH pretty neat. It does also solve parts of the strict XHTML problem. you can only add valid tags and attributes. However it doesn't pay attention to order. (I don't think it was possible that time WASH was written). I've tried to make it better and verify that only valid XHTML is generated. The result is a finate state machine implented using functional dependencies. You can get the code from here git://mawercer.de/vxml.. However while doing so I noticed that this starts turning into a typing hell.. Why? There are some tags which require one or more childs (example : ul). So to distinguish both states (empty ul, ul with at least one element which may be closed) you need two different types. Thus you can no longer do myUl = ul $ map (li . show) [1...] My solution was to switch to a weak checking which only allows valid sub tags but does no longer care about order etc. So by now I'd vote for a partial validation only. a total validation isn't worth the effort. But it would be nice to to derive that from some specification (such as XHTML). So maybe have a look at my library and use the weak validation mode. About Ajax: I've developped some Ajax applications beeing written in PHP using MySQL.. In WASH everything is simple: You have one state (it doesn't know about AJAX). From that state you can go on, duplicate it etc. The state is passed to the client using an hidden input. So there is not that much you have to care about. But you can't write that much interaction easily either. When starting to write a web application (say a web shop).. it would be best if the client page keeps a state knowing about the basket and its content as well. And if you start implenting fancy features such as drag and drop I'm no longer sure which is the best way to handle this client state. I even don't know wether it can be abstracted on server side (using any language).. I'll watch you, keep posting to this list about your progress. Comments about the blog post (http://blog.snoyman.com/2009/01/25/haskell-web-framework/) Maybe the first step is writing down differences between existing haskell web frameworks. Probably the haskell wiki would be a good place to start. Another first step might be writing kind of abstraction so that an application can use either HAppS or apache or (fast)-CGI etc.. Encrypted cookies :-) Nice idea.. However this does mean a lot more traffic, doesn't it? It also depends on your storage enginge. If you have once keeping stuff in memory this won't hurt that much. But you're right. I'll think about that option About 13.: We should be able to simply specify the algorithm necessary to calculate an age from a birthday, and the framework will convert this into both client- and server-side code There is already a haskell - JS converter.. However this will cause a lot more traffic. And if you have many users only loading the front page .. How do you want to utilize the power of existing script frameworks (eg Mootools) ? Should the engine be aware about those? What about CSS abstraction ? I mean ie6 does read some CSS properties quite different.. What about JS automatic compression (maybe even rewriting names to shorter ones)? Sincerly Marc Weber ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] bug in System.Mem.StableName
Sometimes the StableName library gives different values for the samr function: Sometines gives two alternate values. I checked it in ghc-6.10.1 under windows and in ghc-6.8.2 under Linux: This is an example Prelude System.Mem.StableName.hashStableName.System.IO.Unsafe.unsafePerformIO $ System.Mem.StableName.makeStableName (*) 15 Prelude System.Mem.StableName.hashStableName.System.IO.Unsafe.unsafePerformIO $ System.Mem.StableName.makeStableName (*) 14 Prelude System.Mem.StableName.hashStableName.System.IO.Unsafe.unsafePerformIO $ System.Mem.StableName.makeStableName (*) 15 Prelude System.Mem.StableName.hashStableName.System.IO.Unsafe.unsafePerformIO $ System.Mem.StableName.makeStableName (*) 14 ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] MySQL and HDBC?
Chris Waterson wrote: You probably already know this, but... you can mix tables from different storage engines in a single *statement*. Oh, no, I thought it was per database. Horrors! ...when a ROLLBACK has been issued against a non-transactional table... I could raise an error... perhaps this is preferable? John Goerzen wrote: ...what happens in the ODBC case depends on what the user puts in odbc.ini... either the full-on error treatment, or the ignoring the problem It does make sense for this to be configurable. In addition, you might want even more than the current full-on error mode: As Chris pointed out, throwing an exception at commit or rollback is a bit late - your data may already be destroyed by then. There should be a safe mode that raises an exception any time you try make a change to a non-transactional table, even before commit or rollback. That way, you would be able to write code like this: Start doing A in a new transaction. If any operation tries to make a change in a non-transactional table, roll back A and do B instead. Transactional safe mode could still allow reads of non-transactional tables. Is this possible for MySQL and/or ODBC? If you feel that the HDBC API needs to become more rich, I'm quite happy to entertain suggestions there Well, this makes a major difference in the meaning of a program. So it does seem that it should be possible at least to detect what is happening, or even control it programatically. In the case of a connection with less than guaranteed full support for transactions, you would want to be able to choose between the two behaviors available in the ODBC driver, or safe mode. Right now, the meaning of the dbTransactionSupport flag is ambiguous. Does True mean that full support for transactions is guaranteed? Or only that it might be supported for some tables? If not supported for some table, will the driver revert to irrevocable immediate changes, or raise an exception? Will silently ignore commit and rollback requests, or raise an exception? Even before the API becomes richer in this respect, the documentation should more clearly indicate the meaning of this flag (and drivers should then comply). Thanks, Yitz ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] MySQL and HDBC?
Yitzchak Gale wrote: Right now, the meaning of the dbTransactionSupport flag is ambiguous. Does True mean that full support for transactions is guaranteed? Or only that it might be supported for some tables? If not supported for some table, will the driver revert to irrevocable immediate changes, or raise an exception? Will silently ignore commit and rollback requests, or raise an exception? That is quite true. I had not realized that it was possible for this to vary within a MySQL database at the time I put that flag in. I believe MySQL is the only database people are likely to use with HDBC (even Sqlite has universal transaction support) that has this issue, so I would really encourage the community of MySQL users to come up with the API that would be most helpful in this situation, and as I said, I'm happy to add it to HDBC. -- John ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] bug in System.Mem.StableName
2009/1/26 Alberto G. Corona agocor...@gmail.com Sometimes the StableName library gives different values for the samr function: First, unsafePerformIO is not subject to referential transparency. You have to ensure it yourself. That's why it's unsafe. Now, did you read the StableName documentation? From the docs: Stable names have the following property: if sn1 :: StableName and sn2 :: StableName and sn1 == sn2 then sn1 and sn2 were created by calls to makeStableName on the same object. The reverse is not necessarily true: if two stable names are not equal, then the objects they name may still be equal. So the behavior you cite is perfectly reasonable: does not break referential transparency (unsafePerformIO is the culprit here), and is consistent with the documentation. Luke Sometines gives two alternate values. I checked it in ghc-6.10.1 under windows and in ghc-6.8.2 under Linux: This is an example Prelude System.Mem.StableName.hashStableName.System.IO.Unsafe.unsafePerformIO $ System.Mem.StableName.makeStableName (*) 15 Prelude System.Mem.StableName.hashStableName.System.IO.Unsafe.unsafePerformIO $ System.Mem.StableName.makeStableName (*) 14 Prelude System.Mem.StableName.hashStableName.System.IO.Unsafe.unsafePerformIO $ System.Mem.StableName.makeStableName (*) 15 Prelude System.Mem.StableName.hashStableName.System.IO.Unsafe.unsafePerformIO $ System.Mem.StableName.makeStableName (*) 14 ___ 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] ANN: filestore 0.1
-BEGIN PGP SIGNED MESSAGE- Hash: SHA512 On Mon, Jan 26, 2009 at 12:17 AM, carmen wrote: back to the original topic of the thread.. cool project, id be interested ina pure-FS backend as well, as the overhead of a git/hg add/commit is a bit too much for eg a single 'field' of data Well, for high-performance we expect people to use Data.Binary and roll their own subset of version-controlling capabilities. If you wouldn't use git or darcs for something to begin with, filestore isn't going to help much. plus you can also verison via new URIs and/or a subtree-versioning FS like BTRfs... Going through a versioning FS sounds like a good idea, although I wouldn't want to implement some of the more complex functions like a history changelog. Patches are welcome. (Versioning plain files vie new names sounds very inefficient to me, though; I wonder if such a system would be worse than just using darcs/git.) - -- gwern -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) iEYEAREKAAYFAkl9zDEACgkQvpDo5Pfl1oI98ACfdt7jic+VccLSVaBBvuvAHBJ6 3UwAn365v53Zzm2mK2CCWCaRbCxT+Kum =LJol -END PGP SIGNATURE- ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] ANN: filestore 0.1
-BEGIN PGP SIGNED MESSAGE- Hash: SHA512 On Mon, Jan 26, 2009 at 5:35 AM, Thomas Davie wrote: -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) iEYEAREKAAYFAkl9zdAACgkQvpDo5Pfl1oKpawCdGc/rC5JOavHiUw/vpnrAkaqw KmsAoJf7NgTWJyXMag7OH3uzA5JOpUa6 =kU/4 -END PGP SIGNATURE- On 26 Jan 2009, at 06:17, carmen wrote: back to the original topic of the thread.. cool project, id be interested ina pure-FS backend as well, Indeed, very cool! Can I make another feature request – generalize how diffs are created, so that I could in theory parse the file contents, and then diff the CSTs rather than diffing text. Bob___ Well, if you look you see that 'diff' is in the Generic module; that is, diff can be defined using the basic operators provided by the backend. In this case, you 'diff' two versions by retrieving a specific revision, storing it, and then retrieving the other specific revision, storing it, and then filestore calls the Diff package on the two Strings. Nothing stops you from copying this approach and adding in a parsing step and then passing it to a custom diff - as long as the backend supplies 'retrieve', you're good. -- gwern ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Haskell Web Framework
May i suggest Johan Tibell's web application interface (see http://github.com/tibbe/hyena/tree/master). It is similar to WSGI. Hyena can then be used as an application server and frameworks won't have to create their own servers. Many people have different opinions about web frameworks but a single very robust Haskell server would be an asset for all frameworks. Thanks for the link, I'd never heard of it before. It might be a perfect fit. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] bug in System.Mem.StableName
I would not trust this weird combination of functions in ghci anyway. 2009/1/26 Alberto G. Corona agocor...@gmail.com: Sometimes the StableName library gives different values for the samr function: Sometines gives two alternate values. I checked it in ghc-6.10.1 under windows and in ghc-6.8.2 under Linux: This is an example Prelude System.Mem.StableName.hashStableName.System.IO.Unsafe.unsafePerformIO $ System.Mem.StableName.makeStableName (*) 15 Prelude System.Mem.StableName.hashStableName.System.IO.Unsafe.unsafePerformIO $ System.Mem.StableName.makeStableName (*) 14 Prelude System.Mem.StableName.hashStableName.System.IO.Unsafe.unsafePerformIO $ System.Mem.StableName.makeStableName (*) 15 Prelude System.Mem.StableName.hashStableName.System.IO.Unsafe.unsafePerformIO $ System.Mem.StableName.makeStableName (*) 14 ___ 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] Haskell Web Framework
those that want it. From my Django experience, I must say that very few things are cooler than calling a script which automatically generates all the boilerplate code inherent in every web app. Cooler: abstracting away the boilerplate. Michael 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] Haskell Web Framework
The best approach is to push as much functionality into the client as possible. The ideal server-side framework consists of nothing more than a permissions-based interface to persistence and network services. That's it. Everything else is done on the client side, in JavaScript. Web designers can pretty easily style dynamically generated HTML, if the semantics are good -- you just need to let them capture that HTML in any given part of the application. What this means is that effort is probably best directed at Yhc/ JavaScript and similar projects, which compile Haskell to JavaScript for execution on the client. Sure, some server-side work needs to be done, but it's extremely minimal. Far more needs to be done on the client-side. There's not many people working on that and the infrastructure is in need of more creative input and development resources. Regards, John A. De Goes N-BRAIN, Inc. The Evolution of Collaboration http://www.n-brain.net|877-376-2724 x 101 On Jan 25, 2009, at 10:54 PM, Michael Snoyman wrote: I´m working in a web application rather than a web framework. But I sometimes think about how a complete web application server should be. For my case, I don´t care about the presentation, because HSP is more than enough. However, I need active-active clustering, distributed transactions and workflows. I have created the module Workflow for the latter. For the former, I developped TCache, that is a transactional cache using STM, with configurable persistence. It ´s like hibernate for Java and (the data part of) Rails for Rubi. Now I´m working in a extension of TCache with distributed transactions and remote clustering with some additonal interesting characteristics. That all sounds like something that would fit very nicely into this framework that I'm addressing. My own view about haskell and Web applications is that something like a web framework is not in the philosophy of Haskell. What is in the philosophy of Haskell is the creation of modules that the people can combine to create their own web frameworks. I agree to a certain extent. If you look at the code that I've written so far, it's in layers. The bottom layer defines a Request and Response object, defines a service as Request - IO Response, and a server as something as essentially Service - IO (). The next layer is a controller which is itself a service. View details are built on top of this. In your case, you could bypass all the controller logic if you like and simply deal with the server definition. You would get the advantage of having your app work as a standalone server, a CGI program, FastCGI, or anything else that people write adapters for. Someone else might decide to use the the controller and ignore the specialized view code (they really like dealing with straight Strings perhaps). However, I think we should develop a full stack so that it is available for those that want it. From my Django experience, I must say that very few things are cooler than calling a script which automatically generates all the boilerplate code inherent in every web app. I think those features should be available to those who want it (even if it's not in the spirit of Haskell), while those who want to treat the framework as a set of libraries need not been hindered by the extra features. Michael ___ 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] Haskell Web Framework
On Mon, Jan 26, 2009 at 9:37 AM, John A. De Goes j...@n-brain.net wrote: The best approach is to push as much functionality into the client as possible. The ideal server-side framework consists of nothing more than a permissions-based interface to persistence and network services. That's it. Everything else is done on the client side, in JavaScript. Web designers can pretty easily style dynamically generated HTML, if the semantics are good -- you just need to let them capture that HTML in any given part of the application. What this means is that effort is probably best directed at Yhc/JavaScript and similar projects, which compile Haskell to JavaScript for execution on the client. Sure, some server-side work needs to be done, but it's extremely minimal. Far more needs to be done on the client-side. There's not many people working on that and the infrastructure is in need of more creative input and development resources. That's great in theory, but then you end of with inaccessible web sites, those without Javascript are left out in the cold, and search engines won't index you. I think any framework should transparently make a site work the way you describe and as plain HTML. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Haskell Web Framework
We're talking about web applications and Web 2.0 sites, which is the principal target of Rails and its ilk. For primarily static content- oriented sites, static HTML works just fine, but even in this case, you can do dynamic transformations on the HTML in order to provide a richer, more user-friendly surfing experience. It's only a matter of time until browsers provide better accessibility for web apps and search engines start indexing JavaScript-generated content. The era of HTML templates and heavy server-side HTML is coming to a close, for all but static content-oriented websites. The whole industry is moving in a dynamic direction (along with developer tools and libraries), and it would be a shame if a bunch of Haskell developers got together to write a really great Haskell web framework for the Internet as it was 5 years ago. Times have changed. Haskell - JavaScript is a much more fruitful direction to pursue, I think. Regards, John A. De Goes N-BRAIN, Inc. The Evolution of Collaboration http://www.n-brain.net|877-376-2724 x 101 On Jan 26, 2009, at 10:49 AM, Michael Snoyman wrote: On Mon, Jan 26, 2009 at 9:37 AM, John A. De Goes j...@n-brain.net wrote: The best approach is to push as much functionality into the client as possible. The ideal server-side framework consists of nothing more than a permissions-based interface to persistence and network services. That's it. Everything else is done on the client side, in JavaScript. Web designers can pretty easily style dynamically generated HTML, if the semantics are good -- you just need to let them capture that HTML in any given part of the application. What this means is that effort is probably best directed at Yhc/ JavaScript and similar projects, which compile Haskell to JavaScript for execution on the client. Sure, some server-side work needs to be done, but it's extremely minimal. Far more needs to be done on the client-side. There's not many people working on that and the infrastructure is in need of more creative input and development resources. That's great in theory, but then you end of with inaccessible web sites, those without Javascript are left out in the cold, and search engines won't index you. I think any framework should transparently make a site work the way you describe and as plain HTML. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] ANN: filestore 0.1
I wonder if Bulat Ziganshin's FreeARC software could serve as a back- end to the filestore API, and if it did what sort of time and space performance it would have. And if it was good, then I wonder if it could then be used by darcs. :-) Regards, Zooko On Jan 24, 2009, at 17:19 PM, Bulat Ziganshin wrote: Hello Gwern, Sunday, January 25, 2009, 2:56:07 AM, you wrote: my usual complaint: it will be great to see all announces duplicated in main haskell list ANN filestore 0.1 We are pleased to announce the first release of a new library, filestore. What is it? filestore provides a uniform, abstract, generic interface for storing versioned files on disk. It allows calling programs to use generic commands to store strings or binary data and perform various queries, such as 'what files are in this repository?' or 'what were the contents of this file at revision XXX?' or 'give me a diff of this file between revision XXX and revision YYY.' Because the interface is abstract, the calling program is insulated from the messy details of the backend (which might be a VCS or a database). What backends are supported? Darcs and Git are fully supported. There are plans for a SQLite backend. What is this good for? Currently it is used by two wikis, Gitit and Orchid. We hope it will see use in other applications as well that need to version data and would like the various advantages of DVCSs (such as easy collaboration, advanced merging, etc.). Where can you get it? Your local cabal-install, Hackage at http://hackage.haskell.org/cgi-bin/hackage-scripts/package/filestore and of course you can do 'darcs get http://johnmacfarlane.net/repos/filestore' for the very latest. filestore was written by John MacFarlane, Gwern Branwen, and Sebastiaan Visser -- Best regards, Bulatmailto:bulat.zigans...@gmail.com ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe --- Tahoe, the Least-Authority Filesystem -- http://allmydata.org store your data: $10/month -- http://allmydata.com/?tracking=zsig ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Ann: Progress with IDE
Leksah 0.4.0* pre-release is now available. This will become the first beta when it is stable enough. The current feature list: * Haskell customized editor with candy * Project management support based on Cabal * Visual editor for Cabal files * Location of compilation errors * Import helper, which writes the import statements * Navigation to definition * Module browser * Information about types and comments * Search for identifiers * Session support * Configurable visual appearance * Configurable keymaps Get more info at: http://www.leksah.org We now have a mailing list for Leksah: http://projects.haskell.org/cgi-bin/mailman/listinfo/leksah You need ghc 6.10 and gtk2hs 0.10 (which is not yet released, but you get it here: http://code.haskell.org/~pgavin/gtk2hs-0.10.0/ ) Please test Leksah and give me feedback. Contributors welcome. Jürgen --keksa leksa haksel-- ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] ANN: filestore 0.1
-BEGIN PGP SIGNED MESSAGE- Hash: SHA512 On Mon, Jan 26, 2009 at 1:52 PM, zooko wrote: I wonder if Bulat Ziganshin's FreeARC software could serve as a back-end to the filestore API, and if it did what sort of time and space performance it would have. And if it was good, then I wonder if it could then be used by darcs. :-) Regards, Zooko I'd say there're a few roadblocks before this route is pursued any further. For example, looking at the FreeArc website, I see that there is apparently no 64-bit version. Which is an issue. - -- gwern -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) iEYEAREKAAYFAkl+HIwACgkQvpDo5Pfl1oKHuQCfSJk9mNHfBEmwcNorNANOdsZ0 MZsAmgJlkCGC5ehagUX9/hmCcbkJfoIX =NhqH -END PGP SIGNATURE- ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Re: Ann: Progress with IDE
-BEGIN PGP SIGNED MESSAGE- Hash: SHA512 On Mon, Jan 26, 2009 at 3:05 PM, Jürgen Nicklisch-Franken wrote: Leksah 0.4.0* pre-release is now available. This will become the first beta when it is stable enough. The current feature list: * Haskell customized editor with candy * Project management support based on Cabal * Visual editor for Cabal files * Location of compilation errors * Import helper, which writes the import statements * Navigation to definition * Module browser * Information about types and comments * Search for identifiers * Session support * Configurable visual appearance * Configurable keymaps Get more info at: http://www.leksah.org We now have a mailing list for Leksah: http://projects.haskell.org/cgi-bin/mailman/listinfo/leksah You need ghc 6.10 and gtk2hs 0.10 (which is not yet released, but you get it here: http://code.haskell.org/~pgavin/gtk2hs-0.10.0/ ) Please test Leksah and give me feedback. Contributors welcome. Jürgen --keksa leksa haksel-- I tried using that gtk2hs tarball. make eventually errored out as: Reading package info from stdin ... done. cannot find libHSgstreamer.a on library path (ignoring) Writing new package config file... done. touch tools/c2hs/c2hsLocal.deps; /home/gwern/bin/bin/ghc -M - -dep-makefile -optdeptools/c2hs/c2hsLocal.deps -fglasgow-exts -O - -itools/c2hs/base/admin:tools/c2hs/base/errors:tools/c2hs/base/general:tools/c2hs/base/state:tools/c2hs/base/syms:tools/c2hs/base/syntax:tools/c2hs/c:tools/c2hs/chs:tools/c2hs/gen:tools/c2hs/state:tools/c2hs/toplevel - -package-conf package.conf.inplace -hide-all-packages -package base-4.0.0.0 -package haskell98-1.0.1.0 -package pretty-1.0.1.0 - -package containers-0.2.0.0 -package array-0.2.0.0 tools/c2hs/base/admin/BaseVersion.hs tools/c2hs/base/admin/Config.hs tools/c2hs/base/errors/Errors.hs tools/c2hs/base/general/DLists.hs tools/c2hs/base/general/FileOps.hs tools/c2hs/base/general/FNameOps.hs tools/c2hs/base/general/Map.hs tools/c2hs/base/general/Position.hs tools/c2hs/base/general/Set.hs tools/c2hs/base/general/UNames.hs tools/c2hs/base/general/Binary.hs tools/c2hs/base/general/FastMutInt.hs tools/c2hs/base/state/CIO.hs tools/c2hs/base/state/StateBase.hs tools/c2hs/base/state/State.hs tools/c2hs/base/state/StateTrans.hs tools/c2hs/base/syms/Attributes.hs tools/c2hs/base/syms/Idents.hs tools/c2hs/base/syms/NameSpaces.hs tools/c2hs/base/syntax/Lexers.hs tools/c2hs/c/CAST.hs tools/c2hs/c/CAttrs.hs tools/c2hs/c/CBuiltin.hs tools/c2hs/c/C.hs tools/c2hs/c/CLexer.hs tools/c2hs/c/CNames.hs tools/c2hs/c/CParser.hs tools/c2hs/c/CParserMonad.hs tools/c2hs/c/CPretty.hs tools/c2hs/c/CTokens.hs tools/c2hs/c/CTrav.hs tools/c2hs/chs/CHS.hs tools/c2hs/chs/CHSLexer.hs tools/c2hs/gen/CInfo.hs tools/c2hs/gen/GBMonad.hs tools/c2hs/gen/GenBind.hs tools/c2hs/gen/GenHeader.hs tools/c2hs/state/C2HSState.hs tools/c2hs/state/Switches.hs tools/c2hs/toplevel/Main.hs tools/c2hs/toplevel/Version.hs tools/c2hs/toplevel/C2HSConfig.hs; ./mk/chsDepend -i:glib glib/System/Glib/Types.chs ./mk/chsDepend -i:glib glib/System/Glib/GType.chs ./mk/chsDepend -i:glib glib/System/Glib/GValue.chs ./mk/chsDepend -i:glib glib/System/Glib/GValueTypes.chs gcc -E -x c -traditional-cpp -I/usr/include/glib-2.0 - -I/usr/lib/glib-2.0/include -DGTK2HS_HS_PREPROC -include gtk2hs-config.h glib/System/Glib/GObject.chs.pp -o glib/System/Glib/GObject.chs glib/System/Glib/GObject.chs.pp:38: error: missing expression between '(' and ')' glib/System/Glib/GObject.chs.pp:91: error: missing expression between '(' and ')' make: *** [glib/System/Glib/GObject.chs] Error 1 Any suggestions? - -- gwern -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) iEYEAREKAAYFAkl+LQQACgkQvpDo5Pfl1oIvkwCdEALTIIHJkJ3q5vM0bEbIRVnl 9rEAnRgYfgvdTsnzhfkGdxV9wUS6ORM0 =G6cf -END PGP SIGNATURE- ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Why binding to existing widget toolkits doesn't make any sense
Hacking away on bindings to (http://libagar.org), specifically (http://libagar.org/mdoc.cgi?man=AG_Object.3), I was suddenly swept away by a general crisis of purpose: I was spending time on figuring out how to create agar objects, implemented in Haskell, on the fly, to enable me to write a high-level interface, instead of spending time on designing The FRUI API To Obsolete Them All. The reason for this are means of composability: What use is a nice interface to a button and an isomorphic interface to a textbox, if I can't compose them properly? Users might want to use standard widgets in indefinitely many combinations of type, with an equal amount of distinct wirings and external interfaces. As some of you might have noticed [1][2], constructing foreign objects is painful, specifying custom classes even more so... in case it's not infeasible hard to support in the first place. In agar's case it's certainly possible, by the virtue of being implemented in plain C. So we _could_ expose the whole generality of a TK's means of composing to the user. Which is most likely not what he wants, he wants to use the whole generality of Haskell to compose UI's. In Agar's case, the user won't care much about generating N checkboxes for a bitfield integer, he'd rather use [Event Bool]. Summing up, there's a lot of plumbing to be done, in the end still amounting to a lot of dead, unused code in the TK, BECAUSE TOOLKITS ARE DESIGNED TO BE USED IN THE LANGUAGE THEY WERE BLEEDING WRITTEN IN AND PROVIDE CUSTOM ABSTRACTIONS TAILORED TO THAT LANGUAGE. This is basically the Saphir-Worph hypothesis adapted to programs. So what's left of those TK's if we don't use their abstractions and replace them with Haskell? Drawing and layouting, that's what's left[3]. Both, IMNSHO, do not justify carrying around bloaty external dependencies, they're too trivial. They certainly don't justify using unsafePerformIO to hide foreign side effects and the headaches associated with it. So, if you don't mind, I'm going to stop trying to fit cubes into round holes and gonna use reactive and fieldtrip[4] to do things. [1]http://softbase.org/hqk/qoo/qoo.pdf [2]http://haskell.org/gtk2hs/docs/devel/System-Glib-GObject.html#v%3AmakeNewGObject [3]Somewhat disregarding using OS widgets, but that's unimportant since native look+feel is vastly overrated. I've got enough asbestos to defend that against alt.politics. [4]Gotta get rid of glut, though. -- (c) this sig last receiving data processing entity. Inspect headers for copyright history. All rights reserved. Copying, hiring, renting, performance and/or quoting of this signature prohibited. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Re: Ann: Progress with IDE
On Mon, 2009-01-26 at 16:37 -0500, Gwern Branwen wrote: I tried using that gtk2hs tarball. make eventually errored out as: glib/System/Glib/GObject.chs.pp:38: error: missing expression between '(' and ')' glib/System/Glib/GObject.chs.pp:91: error: missing expression between '(' and ')' make: *** [glib/System/Glib/GObject.chs] Error 1 Any suggestions? I've seen this occasionally. If you check gtk2hs-confg.h near the bottom of the file you'll likely find something like #def _GLIB_MAJOR_VERSION () rather than #def _GLIB_MAJOR_VERSION (2) It is ./configure that generates the gtk2hs-confg.h from gtk2hs-confg.h.in based on tests in configure.ac. I've never been able to reproduce it and when others have helped me investigate we did not find a solution or indeed a cause. If you'd like to do some digging it'd be much appreciated. I'm cc'ing the gtk2hs-users list just in case someone else has already diagnosed this. Duncan ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Re: Ann: Progress with IDE
-BEGIN PGP SIGNED MESSAGE- Hash: SHA512 On Mon, Jan 26, 2009 at 8:07 PM, Duncan Coutts wrote: On Mon, 2009-01-26 at 16:37 -0500, Gwern Branwen wrote: I tried using that gtk2hs tarball. make eventually errored out as: glib/System/Glib/GObject.chs.pp:38: error: missing expression between '(' and ')' glib/System/Glib/GObject.chs.pp:91: error: missing expression between '(' and ')' make: *** [glib/System/Glib/GObject.chs] Error 1 Any suggestions? I've seen this occasionally. If you check gtk2hs-confg.h near the bottom of the file you'll likely find something like #def _GLIB_MAJOR_VERSION () rather than #def _GLIB_MAJOR_VERSION (2) It is ./configure that generates the gtk2hs-confg.h from gtk2hs-confg.h.in based on tests in configure.ac. I've never been able to reproduce it and when others have helped me investigate we did not find a solution or indeed a cause. If you'd like to do some digging it'd be much appreciated. I'm cc'ing the gtk2hs-users list just in case someone else has already diagnosed this. Duncan Yes, that file does seem broken in the way you describe. Starting at line 132: /* Glib major version */ #define _GLIB_MAJOR_VERSION () /* Glib micro version */ #define _GLIB_MICRO_VERSION () /* Glib minor version */ #define _GLIB_MINOR_VERSION () /* gnome-vfs major version */ #define _GNOME_VFS_MAJOR_VERSION () /* gnome-vfs micro version */ #define _GNOME_VFS_MICRO_VERSION () /* gnome-vfs minor version */ #define _GNOME_VFS_MINOR_VERSION () /* gstreamer major version */ #define _GST_MAJOR_VERSION () /* gstreamer micro version */ #define _GST_MICRO_VERSION () /* gstreamer minor version */ #define _GST_MINOR_VERSION () /* gtksourceview2 major version */ #define _GTKSOURCEVIEW2_MAJOR_VERSION () /* gtksourceview2 micro version */ #define _GTKSOURCEVIEW2_MICRO_VERSION () /* gtksourceview2 minor version */ #define _GTKSOURCEVIEW2_MINOR_VERSION () /* Gtk+ major version */ #define _GTK_MAJOR_VERSION () /* Gtk+ micro version */ #define _GTK_MICRO_VERSION () /* Gtk+ minor version */ #define _GTK_MINOR_VERSION () /* librsvg major version */ #define _LIBRSVG_MAJOR_VERSION () /* librsvg micro version */ #define _LIBRSVG_MICRO_VERSION () /* librsvg minor version */ #define _LIBRSVG_MINOR_VERSION () /* Pango major version */ #define _PANGO_MAJOR_VERSION () /* Pango micro version */ #define _PANGO_MICRO_VERSION () /* Pango minor version */ #define _PANGO_MINOR_VERSION () That all looks quite broken. I'm afraid I don't know enough about autotools to figure this out. However, I've put up a tarball of the gtk directory just after a make failed, at http://code.haskell.org/~gwern/gtk-broken.tar.gz so people can look at it themselves? - -- gwern -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) iEYEAREKAAYFAkl+cvcACgkQvpDo5Pfl1oLXwACgl2V427baEPYV3AHwnTZH2W5D wlMAoJgqQdUjBHCIi01UHlvtyQUyifMa =INxD -END PGP SIGNATURE- /* gtk2hs-config.h. Generated from gtk2hs-config.h.in by configure. */ /* gtk2hs-config.h.in. Generated from configure.ac by autoheader. */ /* Hack to suppress warnings that these symbols clash with the ones from ghc's version of config.h */ #undef /**/ PACKAGE_NAME #undef /**/ PACKAGE_STRING #undef /**/ PACKAGE_TARNAME #undef /**/ PACKAGE_VERSION /* Leave out all deprecated functions. */ /* #undef DISABLE_DEPRECATED */ /* Whether or not the cairo package is available. */ #define ENABLE_CAIRO /* cairo pdf backend enabled */ #define ENABLE_CAIRO_PDF_SURFACE /* cairo png functions available */ #define ENABLE_CAIRO_PNG_FUNCTIONS /* cairo ps backend enabled */ #define ENABLE_CAIRO_PS_SURFACE /* cairo svg backend enabled */ #define ENABLE_CAIRO_SVG_SURFACE /* Whether or not the firefox package is available. */ /* #undef ENABLE_FIREFOX_MOZEMBED */ /* Whether or not the gconf package is available. */ #define ENABLE_GCONF /* Whether or not the gio package is available. */ #define ENABLE_GIO /* Whether or not the gnomevfs package is available. */ #define ENABLE_GNOMEVFS /* Whether or not the gstreamer package is available. */ #define ENABLE_GSTREAMER /* Whether or not the gtk package is available. */ #define ENABLE_GTK /* Whether or not the opengl package is available. */ #define ENABLE_GTKGLEXT /* Whether or not the gtksourceview2 package is available. */ /* #undef ENABLE_GTKSOURCEVIEW2 */ /* Whether or not the libglade package is available. */ #define ENABLE_LIBGLADE /* Whether or not the mozilla package is available. */ #define ENABLE_MOZILLA_MOZEMBED /* Whether or not the seamonkey package is available. */ /* #undef ENABLE_SEAMONKEY_MOZEMBED */ /* Whether or not the sourceview package is available. */ #define ENABLE_SOURCEVIEW /* Whether or not the svg package is available. */ #define ENABLE_SVGCAIRO /* Whether or not the xulrunner package is available. */ /* #undef ENABLE_XULRUNNER_MOZEMBED */ /* Omit deprecated gdk functions. */ /* #undef GDK_DISABLE_DEPRECATED */ /* Omit deprecated
[Haskell-cafe] ANN: convertible (first release)
Hi folks, I have uploaded a new package to Haskell: convertible. At its heart, it's a very simple typeclass that's designed to enable a reasonable default conversion between two different types without having to remember a bunch of functions. The return type from this conversion is Either ConvertError a, and conversions are expected to do sanity checking (such as bounds checking when converting to types like Int), so as to produce neither garbage nor exceptions as part of the conversion process. The package also includes instances of the Convertible typeclass for working with numeric types as well as dates and times. Notably, it has code to convert between System.Time types and their Data.Time siblings, and vice versa, a capability I found annoyingly lacking in the standard library. There is also a simple wrapper function called convert, that transforms a Left result into a call to error, and returns a Right result. For HDBC v2.0, the SqlValue/SqlType system has been completely rewritten in terms of Convertible, though I expect backwards compatibility will not be broken by this change (existing code will compile and run fine). I hope to release v2.0 of the HDBC API and backends in a few days. Convertible is not for everyone; if you care whether you use truncate or round to convert a Double to an Integer, this isn't for you. Note, though, that you can import the library without its default instances, so you can define your own if you prefer. API docs and downloads at: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/convertible -- John ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] ANN: testpack (first release)
Hi, I've just uploaded testpack to Hackage. It's a collection of a few utilities for tests: some tools to convert QuickCheck properties into HUnit test cases, and various shortcuts and tools to increase verbosity while running tests in both QuickCheck and HUnit. It is pulled partly from MissingH (a few modules being split off), and partly from functions I find myself writing over and over again. API docs and downloads at: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/testpack Like convertible, it should be compatible with Hugs, GHC 6.8, and GHC 6.10. -- John ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] foreign function types
I have encountered quite a bit of bugs in foreign bindings where Int was used in place of Cint. As far as I know, no foreign function should ever take a Haskell Int, only CInts. Would it be possible to create an empty type-class of which various C-acceptable types are instances (e.g CInt, CString) but Haskell types aren't (Ints)? I am not sure this is the right solution, but I think the problem of accidentally using Int in place of CInt should be solved so that compile-time errors are received, as for x86-32 systems, no compile time or even runtime error will be issued. It will wait and crash when run on an x86-64 system. Eyal ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] ANN: Wired 0.2
There is now a new release of Wired available: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Wired The most important news in this release is that it now contains a 45nm cell library, which means that you can use Wired to create and analyze modern VLSI designs[*] today! However... Wired is still in the experimentation phase, but is slowly stabilizing. The current status is further explained in the package text. There's very little documentation (basically only a few examples), so I expect it to be quite hard to use if you haven't seen it before. I hope to improve the documentation in the future. Feel free to mail me questions meanwhile. / Emil [*] Unfortunately, while the 45nm library is realistic, it's not based on any actual process that can be fabricated. Contact me if you have access to any real cell library and are interested in using it with Wired. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe