[Haskell-cafe] hackage trac broken
Hi, a Debian user tried to report a bug against cabal-install (http://bugs.debian.org/655752) but the trac instance linked from the Cabal homepage seems to be down: http://hackage.haskell.org/trac/hackage/ Internal Server Error TracError: IOError: [Errno 13] Permission denied: '/srv/trac/hackage/VERSION' Is this known and will it be fixed? Thanks, Joachim -- Joachim nomeata Breitner Debian Developer nome...@debian.org | ICQ# 74513189 | GPG-Keyid: 4743206C JID: nome...@joachim-breitner.de | http://people.debian.org/~nomeata signature.asc Description: This is a digitally signed message part ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Installing dph-examples in Mac OS X Version 10.7.2
Hello all I am trying to install dph-examples on Mac OS X. First I have Xcode 4.2.1 and during the installation i got this http://hpaste.org/56445 error Installing library in /Users/mukesh/.cabal/lib/dph-seq-0.5.1.1/ghc-7.2.1Registering dph-seq-0.5.1.1...Downloading dph-examples-0.5.1.2...Configuring dph-examples-0.5.1.2...Building dph-examples-0.5.1.2...Preprocessing executable 'dph-sumsq-seq' for dph-examples-0.5.1.2...[1 of 5] Compiling SumSquaresVectorised ( imaginary/SumSquares/dph/SumSquaresVectorised.hs, dist/build/dph-sumsq-seq/dph-sumsq-seq-tmp/SumSquaresVectorised.o )Error (fd:12: hGetLine: end of file)Warning: Couldn't figure out LLVM version!Make sure you have installed LLVMghc: could not execute: optcabal: Error: some packages failed to install:dph-examples-0.5.1.2 failed during the building phase. The exception was:ExitFailure 1 On stackoverflowhttp://stackoverflow.com/questions/8864696/installing-dph-examples-in-mac-os-x-10-7-2 , i got suggestion to remove Xcode 4.2 and install Xcode 3.2. After installing Xcode 3.2 , I am still getting this error. Macintosh:~ mukesh$ cabal install dph-examples Resolving dependencies... Configuring dph-examples-0.5.1.2... Building dph-examples-0.5.1.2... Preprocessing executable 'dph-sumsq-seq' for dph-examples-0.5.1.2... [1 of 5] Compiling SumSquaresVectorised ( imaginary/SumSquares/dph/SumSquaresVectorised.hs, dist/build/dph-sumsq-seq/dph-sumsq-seq-tmp/SumSquaresVectorised.o ) Error (fd:11: hGetLine: end of file) Warning: Couldn't figure out LLVM version! Make sure you have installed LLVM ghc: could not execute: opt cabal: Error: some packages failed to install: dph-examples-0.5.1.2 failed during the building phase. The exception was: ExitFailure 1 Macintosh:~ mukesh$ uname -a Darwin Macintosh 11.2.0 Darwin Kernel Version 11.2.0: Tue Aug 9 20:56:15 PDT 2011; root:xnu-1699.24.8~1/RELEASE_I386 i386 Macintosh:~ mukesh$ ghc --version The Glorious Glasgow Haskell Compilation System, version 7.2.1 Xcode 3.2 ( 64 bit ) Could some one please tell me how to resolve this issue. Regards Mukesh Tiwari ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] function composition
What you've actually defined is function application. Function composition has a different type: (.) :: (b - c) - (a - b) - a - c (I'd read this as: compose takes a function from b to c, a function from a to b, and something of type a, and produces a c.) You ran into an order of operations issue that masked this bug: p . q 4 /= (p . q) 4 Since you're working through this I don't want to give away the actual definition of function composition, but be sure to follow the type. On 2012-01-15 16.17.24 +0100, TP wrote: Hi, I have a basic question concerning function composition. I have used http://www.haskell.org/tutorial/functions.html to write a composition function: Prelude let f�g = f g Prelude let p = (*2) Prelude let q = (+3) Prelude p�q 4 14 Prelude :t (�) (�) :: (t1 - t) - t1 - t If I understand well, this means that the infix operator � takes a function of type t1, i.e. g in f�g, and applies f on it, which takes a type t1 as input and returns f(g) which is of type t. The final result is of type t. So the first argument is represented above by (t1-t), and the second by t1, the final result being of type t. However, I am not able to get the type of p�q Prelude :t p�q interactive:1:3: Couldn't match expected type `Integer' with actual type `Integer - Integer' In the second argument of `(�)', namely `q' In the expression: p � q Prelude What's the problem here? How can I obtain the type of p�q? Thanks in advance, TP ___ 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] function composition
On Sunday 15 January 2012, 16:17:24, TP wrote: Hi, I have a basic question concerning function composition. I have used http://www.haskell.org/tutorial/functions.html to write a composition function: Prelude let f°g = f g This does not what you probably expect. That definition means (°) = ($) is just function application, or, in other words, (°) is the identity function restricted to function types. If I'm correct in suspecting you want function composition, Prelude let f°g = f . g Prelude let (°) = (.) Prelude let (f ° g) x = f (g x) are possible ways to obtain that. Prelude let p = (*2) Prelude let q = (+3) These two lead to the surprise below. Prelude p°q 4 This is parsed as p ° (q 4) 14 Prelude :t (°) (°) :: (t1 - t) - t1 - t (°) is the identity restricted to function types. If I understand well, this means that the infix operator ° takes a function of type t1, i.e. g in f°g, it may be a function, but need not, it could also be a non-function value like [], True, ... and applies f on it, which takes a type t1 as input and returns f(g) which is of type t. The final result is of type t. So the first argument is represented above by (t1-t), and the second by t1, the final result being of type t. However, I am not able to get the type of p°q Prelude :t p°q interactive:1:3: Couldn't match expected type `Integer' with actual type `Integer - Integer' In the second argument of `(°)', namely `q' In the expression: p ° q Prelude What's the problem here? 1. The monomorphism restriction. You have bound p and q Prelude let p = (*2) Prelude let q = (+3) with simple pattern bindings (plain variable name, no function arguments in the binding) and without type signature. The inferred most general type for both is Num a = a - a which is a constrained polymorphic type. The monomorphism restriction (language report, section 4.5.5) says such bindings must have a monomorphic type. By the defaulting rules (section 4.3.4), the type variable is defaulted to Integer to obtain a monomorphic type. Hence in your session, you have p, q :: Integer - Integer Now, (°) :: (a - b) - a - b, and matching p's type with the type of (°)'s first argument, a = b = Integer. But if we try to match q's type with the type of (°)'s second argument, that type has already been determined to be Integer here, so q's type (Integer - Integer) doesn't match. 2. Even with the monomorhism eliminated, by one (or more) of a) binding p and q with a function binding (let p x = x * 2) b) giving a type signature for the binding c) disabling the MR (Prelude :set -XNoMonomorphismRestriction) you still get something probably unexpected. now p :: Num a = a - a q :: Num b = b - b unifying p's type with the type of (°)'s first argument, (p °) :: Num a = a - a Now we must unify a with q's type, thus (p ° q) :: (Num b, Num (b - b)) = b - b How can I obtain the type of p°q? Eliminate the MR from the picture. Thanks in advance, TP ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] SBLP - call for papers
CALL FOR PAPERS 16th BRAZILIAN SYMPOSIUM ON PROGRAMMING LANGUAGES Natal, Rio Grande do Norte, Brazil September 24-28, 2012 http://www.cbsoft.dimap.ufrn.br IMPORTANT DATES Paper abstract submission (15 lines): April 20nd, 2012 Full paper submission: April 27th, 2012 Notification of acceptance: May 28th, 2012 Final papers due: June 29th, 2012 INTRODUCTION The 16th Brazilian Symposium on Programming Languages, SBLP 2012, will be held in Natal, Brazil, on September 24-28, 2012. SBLP provides a venue for researchers and practitioners interested in the fundamental principles and innovations in the design and implementation of programming languages and systems. The symposium will be part of the 3nd Brazilian Conference on Software: Theory and Practice, CBSoft 2012, http://www.cbsoft.dimap.ufrn.br, which will host four traditional, well-established symposia: * XXVI Brazilian Symposium on Software Engineering (SBES) * XVI Brazilian Symposium on Programming Languages (SBLP) * XV Brazilian Symposium on Formal Methods (SBMF) * VI Brazilian Symposium on Components, Software Architecture and Software Reuse (SBCARS) SBLP 2012 invites authors to contribute with technical papers related (but not limited) to: * Program generation and transformation, including domain- specific languages and model-driven development in the context of programming languages. * Programming paradigms and styles, including functional, object-oriented, aspect-oriented, scripting languages, real-time, service-oriented, multithreaded, parallel, and distributed programming. * Formal semantics and theoretical foundations, including denotational, operational, algebraic and categorical. * Program analysis and verification, including type systems, static analysis and abstract interpretation. * Programming language design and implementation, including new programming models, programming language environments, compilation and interpretation techniques. SUBMISSIONS Contributions should be written in Portuguese or English. We solicit papers that should fall into one of two different categories: full papers, with at most 15 pages, or short papers, with at most 5 pages. All papers should be prepared using the SBC template. In particular, we encourage the submission of short papers reporting on partial results of on-going master dissertations or doctoral theses. All accepted papers will be published in the conference proceedings. Submissions should be done using SBLP 2012 installation of the EasyChair conference mangement system at http://www.easychair.org/conferences/?conf=sblp2012. As in previous editions, a journal special issue, with selected papers from accepted contributions, is anticipated. GENERAL CO-CHAIRS Nélio Cacho, UFRN Gibeon Aquino, UFRN Martin Musicante, UFRN PROGRAMME CHAIRS Francisco Heron de Carvalho Junior, UFC Luis Soares Barbosa, Univ. do Minho PROGRAMME COMMITTEE * Alberto Pardo, Univ. de La Republica * Alex Garcia, IME * Alvaro Freitas Moreira, UFRGS * André Rauber Du Bois, UFPel * Andre Santos, UFPE * Carlos Camarao, UFMG * Christiano Braga, UFF * Fernando Castor Filho, UFPE * Fernando Quintão Pereira, UFMG * Francisco Heron de Carvalho Junior, UFC (co-chair) * Joao Saraiva, Universidade do Minho * João F. Ferreira, Teeside University * Jonathan Aldrich, Carnegie Mellon Univ. * Jose Luiz Fiadeiro, Univ. of Leicester * Lucilia Figueiredo, UFOP * Luis Soares Barbosa, Univ. do Minho * Manuel António Martins, Univ. de Aveiro * Marcelo A. Maia, UFU * Marcello Bonsangue, Leiden Univ/CWI * Marcelo d'Amorim, UFPE * Marco Tulio Valente, UFMG * Mariza A. S. Bigonha, UFMG * Martin A. Musicante, UFRN * Noemi Rodriguez, PUC-Rio * Paulo Borba, UFPE * Peter Mosses, Swansea University * Qiu Zongyang, Beijing University * Rafael Dueire Lins, UFPE * Renato Cerqueira, PUC-Rio * Ricardo Massa, UFPE * Roberto S. Bigonha, UFMG * Roberto Ierusalimschy, PUC-Rio * Sandro Rigo, UNICAMP * Sergio Soares, UFPE * Simon Thompson, Univ. of Kent * Varmo Vene, Univ. de Tartu Simon Thompson | Professor of Logic and Computation School of Computing | University of Kent | Canterbury, CT2 7NF, UK s.j.thomp...@kent.ac.uk | M +44 7986 085754 | W www.cs.kent.ac.uk/~sjt ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] hackage trac broken
On 15 January 2012 12:01, Joachim Breitner nome...@debian.org wrote: Is this known and will it be fixed? It was shut down because of massive spamming: http://www.haskell.org/pipermail/cabal-devel/2012-January/008427.html I have no idea who's working on it and when it will be up again. Cheers, Bas ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] bindings for libvirt
Due to the direction things are going at work, I have become interested in Haskell bindings for libvirt. Noticed that this hasn't been done yet. I was wondering if this was due to lack of motivation, or if there were some difficult hurdles with libvirt that make the project cost-prohibitive. If it's the former, I don't see a problem proceeding with exploration. If it's the latter, I'd like to know what the hurdles are. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] hackage trac broken
Bas van Dijk wrote: On 15 January 2012 12:01, Joachim Breitner nome...@debian.org wrote: Is this known and will it be fixed? It was shut down because of massive spamming: http://www.haskell.org/pipermail/cabal-devel/2012-January/008427.html I have no idea who's working on it and when it will be up again. Aw gee! Now I'm going to get blamed for shutting down the hackage trac when all I did was report spam on it. Erik -- -- Erik de Castro Lopo http://www.mega-nerd.com/ ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] bindings for libvirt
Michael Litchard wrote: Due to the direction things are going at work, I have become interested in Haskell bindings for libvirt. Noticed that this hasn't been done yet. Interesting! I was wondering if this was due to lack of motivation, or if there were some difficult hurdles with libvirt that make the project cost-prohibitive. Well there are already Ocaml bindings for libvirt http://libvirt.org/ocaml/ so its most likely the former. Erik -- -- Erik de Castro Lopo http://www.mega-nerd.com/ ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] bindings for libvirt
That's encouraging! On Sun, Jan 15, 2012 at 1:41 PM, Erik de Castro Lopo mle...@mega-nerd.com wrote: Michael Litchard wrote: Due to the direction things are going at work, I have become interested in Haskell bindings for libvirt. Noticed that this hasn't been done yet. Interesting! I was wondering if this was due to lack of motivation, or if there were some difficult hurdles with libvirt that make the project cost-prohibitive. Well there are already Ocaml bindings for libvirt http://libvirt.org/ocaml/ so its most likely the former. Erik -- -- Erik de Castro Lopo http://www.mega-nerd.com/ ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] HaskellWiki upload failed
L.S., I am trying to upload a file of about 12 Mbyte to the HaskellWiki; the upload fails without error message. Is the file too big? Regards, Henk-Jan van Tuyl -- http://Van.Tuyl.eu/ http://members.chello.nl/hjgtuyl/tourdemonad.html Haskell programming -- ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] bindings for libvirt
Michael Litchard wrote: That's encouraging! In fact, since FFI bindings are usually easier in GHC Haskell than in Ocaml, you should have it done by the end of the week :-). Cheers, Erik -- -- Erik de Castro Lopo http://www.mega-nerd.com/ ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] feed release plan
On 14 January 2012 04:05, Johan Tibell johan.tib...@gmail.com wrote: On Fri, Jan 13, 2012 at 10:46 AM, Simon Michael si...@joyful.com wrote: Aha, thanks both. The haskell organisation looks bigger, I think I'd like to upload feed there. Could the owner add contact info or a how-to-join note to the page ? The Haskell organization on GitHub is for core libraries (i.e. the Haskell Platform) only at this point. It exists to make it easier for a few maintainers to maintain all those libraries. haskell-pkg-janitors on the other hand is for non-core packages that have become unmaintained and need a bit of love, but you don't necessarily want to commit to long-term maintenance. The idea is that anyone in the group is welcome to upload a new release. I've added you on the off-chance you want to upload things there :) Conrad. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Functor0?
Often when I define some type that wraps something else, I find myself writing a function like the following: newtype Thing = Thing X liftThing f (Thing x) = Thing (f x) It's like a Functor, but I can't make it an instance because Functor requires that the type be parametric. So I've been using type families to make a kind of 0 argument functor: class Functor0 a where type Elem a :: * fmap0 :: (Elem a - Elem a) - a - a instance Functor0 Thing where type Elem Thing = X fmap0 = liftThing Is there a name for this? A better way to do it? ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Functor0?
On 01/16/2012 03:26 PM, Evan Laforge wrote: Often when I define some type that wraps something else, I find myself writing a function like the following: newtype Thing = Thing X liftThing f (Thing x) = Thing (f x) It's like a Functor, but I can't make it an instance because Functor requires that the type be parametric. So I've been using type families to make a kind of 0 argument functor: class Functor0 a where type Elem a :: * fmap0 :: (Elem a - Elem a) - a - a instance Functor0 Thing where type Elem Thing = X fmap0 = liftThing Is there a name for this? A better way to do it? ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe ? http://hackage.haskell.org/packages/archive/newtype/0.2/doc/html/Control-Newtype.html ? -- Tony Morris http://tmorris.net/ ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Monad-control rant
Hello Mikhail, Sorry, long email. tl;dr I think it makes more sense for throw/catch/mask to be bundled together, and it is the case that splitting these up doesn't address the original issue monad-control was designed to solve. ~ * ~ Anders and I thought a little more about your example, and we first wanted to clarify which instance you thought was impossible to write. For example, we think it should be possible to write: instance MonadBaseControl AIO AIO Notice that the base monad is AIO: this lets you lift arbitrary AIO operations to a transformed AIO monad (e.g. ReaderT r AIO), but no more. If this is the instance you claimed was impossible, we'd like to try implementing it. Can you publish the full example code somewhere? However, we don't think it will be possible to write: instance MonadBaseControl IO AIO Because this lets you leak arbitrary IO control flow into AIO (e.g. forkIO, with both threads having the ability to run the current AIO context), and as you stated, you only want to allow a limited subset of control flow in. (I think this was the intent of the original message.) Maybe client code doesn't want to be attached to AIO base monads, though; that's too restrictive for them. So they'd like to generalize a bit. So let's move on to the issue of your typeclass decomposition. ~ * ~ I don't think it makes too much sense have thing pick off a menu of Abort/Recover/Finally from a semantics perspective: It's easy to imagine monads that have an instance of one of the classes but not of the others I'd like to see some examples. I hypothesize that most of such monads are incoherent, semantically speaking. For example, what does it mean to have a monad that can recover exceptions, but for which you can't throw exceptions? There only a few options: - You have special primitives which throw exceptions, distinct from Haskell's IO exceptions. In that case, you've implemented your own homebrew exception system, and all you get is a 'Catch MyException' which is too specific for a client who is expecting to be able to catch SomeExceptions. - You execute arbitrary IO and allow those exceptions to be caught. But then I can implement Throw: I just embed an IO action that is throwing an exception. - You only execute a limited subset of IO, but when they throw exceptions they throw ordinary IO exceptions. In this case, the client doesn't have access to any scarce resources except the ones you provided, so there's no reason for him to even need this functionality, unless he's specifically coding against your monad. What does it mean to not have a Finally instance, but a Recover and Throw instance? Well, I can manually reimplement finally in this case (with or without support for asynchronous exceptions, depending on whether or not Mask is available): this is how the paper does it (finally is not a primitive.) What does it mean to have a monad that can throw exceptions, but not catch them? This is any of the usual monads that can fail, of which we have many. And of course, you can't allow this in the presence of scarce resources since there is no way to properly deallocate them when exceptions are thrown. So it seems this is just ordinary failure which cannot be used in the presence of arbitrary IO. What does it mean to have all of the above, but not to have a mask instance? One approach is to pretend asynchronous exceptions do not exist. As you do in your example, we can simply mask. I think this is a bit to give up, but I'll concede it. However, I don't think it's acceptable not to provide mask functionality, not mask your interpreter, and allow arbitrary IO. It's now impossible to properly implement many patterns without having subtle race conditions. So it seems we should collapse these into one class, which conveniently maps straight to the semantics defined in Asynchronous Exceptions in Haskell. class MonadAsyncExc m where mask :: ((forall a. m a - m a) - m b) - m b throw :: SomeException - m () catch :: m a - (SomeException - m a) - m a But you get to have your cake and eat it too: if you define a monad which is guaranteed to be run with asynchronous exceptions masked, you can define the 'mask' function to be a no-op and not violate any laws! Hooray! But this is in fact what MonadCatchIO was, except that MonadCatchIO was formulated when we still had block/unblock and it required MonadIO. So a useful endeavour would be to punt the MonadIO superclass constraint and fix the definitions, and we have something that is usable to your case. ~ * ~ To contextualize this whole discussion, recall the insiduous problem that *motivated* the creation of monad-control. Suppose that we've done all of the hard work and lifted all of the Control.Exception functions to our