From Jon.Fairbairn at cl.cam.ac.uk Fri Apr 1 05:28:53 2005 From: Jon.Fairbairn at cl.cam.ac.uk (Jon Fairbairn) Date: Fri Apr 1 05:11:33 2005 Subject: [Haskell] How to make Haskell more popular Message-ID: <25253.1112351333@cl.cam.ac.uk> 1) If another language has a feature, add it to Haskell, so that absolutely everything can be done in more than one way. This allows people to write Haskell programmes without going through the tiresome process of learning Haskell.` 2) Overload the syntax so that the Hamming distance between syntactically valid programmes is very small 3) Allow casting of any type to any other. 2 and 3 together mean that the programmer wins the "fight" with the compiler more often, and can get on with the exciting business of debugging. 4) Add lots of libraries with widely different styles of interface lacking any recognisable algebraic properties. This makes it hard to learn the libraries, so the programmer gets increased satisfaction when the task is finally completed, and a programmer who understands a given library becomes more valuable in the market. 4a) write the libraries at a low level of abstraction, using as few sophisticated features as possible. This makes it easier for novice programmers to modify libraries and add *features* 5) Static type checking is for wimps. Move it all to runtime, so debugging is even more exciting. With 3, this allows us the glorious possibility of using the same value in different types with different meanings, mimicking PHP's wonderful strpos etc, where the return value zero indicates failure if it's a boolean or success if it's an integer. 6) Use strings for abbreviated syntax, so avoiding even syntax checking at compile time. 7) On second thoughts, all syntax checking is for wimps. Move the rest of it to runtime too. After all, /part/ of the programme might produce plausible output, and we wouldn't want to miss out on that. This adds the further exciting possiblity that end-users will get to see Haskell syntax errors, so more of the world will hear of Haskell. -- J?n Fairbairn Jon.Fairbairn at cl.cam.ac.uk From colin at colina.demon.co.uk Fri Apr 1 05:41:12 2005 From: colin at colina.demon.co.uk (Colin Paul Adams) Date: Fri Apr 1 05:24:09 2005 Subject: [Haskell] How to make Haskell more popular In-Reply-To: <25253.1112351333@cl.cam.ac.uk> References: <25253.1112351333@cl.cam.ac.uk> Message-ID: You omitted: 8) Rename Haskell to VB (or Java or C++ or C#, whichever polls prove to be most popular). -- Colin Paul Adams Preston Lancashire From sebastian.sylvan at gmail.com Fri Apr 1 14:05:55 2005 From: sebastian.sylvan at gmail.com (Sebastian Sylvan) Date: Fri Apr 1 13:48:33 2005 Subject: [Haskell] How to make Haskell more popular In-Reply-To: <25253.1112351333@cl.cam.ac.uk> References: <25253.1112351333@cl.cam.ac.uk> Message-ID: <3d96ac180504011105111ab9ef@mail.gmail.com> On Apr 1, 2005 12:28 PM, Jon Fairbairn wrote: > > 1) If another language has a feature, add it to Haskell, so ... Bah! Why don't you just use Perl! :-) /S -- Sebastian Sylvan +46(0)736-818655 UIN: 44640862 From alex at alexjacobson.com Fri Apr 1 14:33:41 2005 From: alex at alexjacobson.com (S. Alexander Jacobson) Date: Fri Apr 1 14:15:57 2005 Subject: [Haskell] How to make Haskell more popular In-Reply-To: <3d96ac180504011105111ab9ef@mail.gmail.com> References: <25253.1112351333@cl.cam.ac.uk> <3d96ac180504011105111ab9ef@mail.gmail.com> Message-ID: FYI Perl 6 is being implemented in Haskell (in <4k of code!), so you can do both! Project: http://pugscode.org/ Interview: http://www.perl.com/pub/a/2005/03/03/pugs_interview.html -Alex- On Fri, 1 Apr 2005, Sebastian Sylvan wrote: > On Apr 1, 2005 12:28 PM, Jon Fairbairn wrote: >> >> 1) If another language has a feature, add it to Haskell, so > ... > > Bah! Why don't you just use Perl! :-) > > > /S > > -- > Sebastian Sylvan > +46(0)736-818655 > UIN: 44640862 > _______________________________________________ > Haskell mailing list > Haskell@haskell.org > http://www.haskell.org/mailman/listinfo/haskell > ______________________________________________________________ S. Alexander Jacobson tel:917-770-6565 http://alexjacobson.com From pdmc05 at in.tum.de Fri Apr 1 04:36:36 2005 From: pdmc05 at in.tum.de (Martin Leucker) Date: Fri Apr 1 17:43:28 2005 Subject: [Haskell] CfP: PDMC'05 at ICALP'05 Message-ID: <20050401093636.GA6071@atbroy8.informatik.tu-muenchen.de> [[ -- Apologies for multiple copies of this message -- ]] ============================================================================= Call for Papers 4th International Workshop on PARALLEL AND DISTRIBUTED METHODS IN VERIFICATION (PDMC 2005) July 10, 2005 - Lisboa, Portugal Workshop affiliated to ICALP'05 http://pdmc.informatik.tu-muenchen.de ============================================================================= OBJECTIVES: The growing importance of automated formal verification in industry is driving a growing interest in those aspects which have a direct impact on its applicability to real world problems. One of the main technical challenges is in devising tools that allow to handle large state spaces. Over the last years numerous approaches have been developed. Recently, an increasing interest is in parallelizing and distributing of verification techniques. The aim of the PDMC workshop series is to cover all aspects of parallel and distributed methods and techniques for formal verification. Theoretical results, algorithms and case studies are equally welcome. Contributions from the domains of model checking, theorem proving, and equivalence checking are anticipated. The PDMC workshop aims to provide a working forum for presenting, sharing, and discussing recent achievements in the field of parallel and distributed verification. The workshop will consist of invited talks and a selection from submitted papers. SCOPE AND TOPICS: Papers describing recent work on all aspects of parallel and distributed verification are solicited as contributions to PDMC. Topics of interest include, but are not limited to: * parallel and distributed model checking * parallel and distributed equivalence checking * parallel and distributed satisfiability checking * slicing and distributing the state space * distributed theorem proving * distributed constraints solving * parallel methods in probabilistic model checking * file systems for distributed transitions systems * parallel methods in performance evaluation * tools and case studies * industrial applications INVITED SPEAKER: * Kim G. Larsen (Aalborg University, Denmark) SUBMISSION GUIDELINES: There are two categories of submissions: regular papers and presentations. * Manuscripts of regular papers are limited to a maximum of 10 pages (excluding bibliography and technical appendices) in postscript or PDF format (ENTCS style strongly recommended). * Presentations report on relevant results submitted to other forums or already published or on not yet finished work in progress. Presentations will appear in the workshop preliminary proceedings, but will not be considered for the final workshop proceedings. The space limit for presentations is 10 pages (excluding bibliography and technical appendices) in postscript or PDF format (ENTCS style strongly recommended). Submissions should be made electronically using PDMC'05 Submission Page. PROCEEDINGS: The preliminary workshop proceedings will be available at the meeting. The final proceedings appear as a volume of Electronic Notes in Theoretical Computer Science. After the workshop, selected authors will be invited to submit full versions of their papers (regular papers or presentation results not submitted for journal publication) to a special section of a journal (under negotiation). IMPORTANT DATES: * Submission deadline: April 17, 2005 * Notification of acceptance: May 16, 2005 * Presentations deadline: May 22, 2005 * Final version: June 3, 2005 PROGRAM COMMITTEE: * Howard Barringer (Manchester Univ., UK) * Lubos Brim (Masaryk Univ., CZ) * Gianpiero Cabodi (Torino, IT) * Joerg Denzinger (Alberta, Canda) * Wan Fokkink (CWI Amsterdam, NL) * Hubert Garavel (INRIA, FR) * Juergen Giesl (RWTH Aachen, DE) * Orna Grumberg (Haifa, Israel) * Boudewijn R. Haverkort (Univ. of Twente, NL) * Marta Kwiatkowska (Univ. of Birmingham, UK) * Martin Leucker (TU Munich, DE) - Co-chair * Eric Mercer (Brigham Young Univ., USA) * Jaco van de Pol (CWI, NL) - Co-chair * Gerardo Schneider (Univ. of Oslo, Norway) * Willem Visser (NASA Ames Research Center, USA) Martin Leucker & Jaco van de Pol workshop organizers From geoff at cs.miami.edu Fri Apr 1 07:30:10 2005 From: geoff at cs.miami.edu (geoff@cs.miami.edu) Date: Fri Apr 1 17:43:29 2005 Subject: [Haskell] ESCAR in Tallinn, 2nd CFP Message-ID: <20050401123010.CD58EAF09@sherman.cs.miami.edu> ------------------------------------------------------------------------------- ESCAR, a CADE-20 Workshop 22nd-23rd July 2005 http://www.cs.miami.edu/~geoff/Conferences/ESCAR/ Tallinn, Estonia The CADE-20 Workshop on Empirically Successful Classical Automated Reasoning (ESCAR) will bring together practioners and researchers who are concerned with the implementation and deployment of working automated reasoning systems for classical logic (propositional, first order, and higher order). The workshop will discuss "really running" systems, and not theoretical ideas that have not yet been translated into working software. ESCAR is the successor to the successful ESFOR workshop held at IJCAR 2004. CADE-20 will be 22nd to 27th July 2005, with ESCAR on the 22nd and 23rd. Full details are available at: http://www.cs.miami.edu/~geoff/Conferences/ESCAR/ Submission of papers for presentation at the workshop, and proposals for system and application demonstrations at the workshop, are now invited. Submissions will be refereed, and a balanced program of high-quality contributions will be selected. The submission deadline is 1st May, notification of acceptance on 30th May, and camera ready versions due 12th June. Submission information is online at: http://www.cs.miami.edu/~geoff/Conferences/ESCAR/ Additionally, the Journal of Automated Reasoning has agreed to a special issue on emperically successful automated reasoning. Authors of ESCAR papers will be able to submit extended versions of their workshop papers for this special issue. All papers submitted for the special issue will be reviewed according to the journal's standards. ------------------------------------------------------------------------------- From klusch at dfki.de Fri Apr 1 09:06:27 2005 From: klusch at dfki.de (Matthias Klusch) Date: Fri Apr 1 17:43:29 2005 Subject: [Haskell] MATES/CIA 2005: Submission Deadline Extended Until April 18, 2005 Message-ID: <424D5563.40400@dfki.de> +++ Apologies for multiple copies due to cross postings +++ CALL FOR PAPERS - EXTENDED SUBMISSION DEADLINE ********************************************* Third German Conference on Multi-Agent System Technologies (MATES 05), September 11 - 13, 2005, Koblenz, Germany http://www.mates2005.de/ * Incorporating the 9th International Workshop on Cooperative Information Agents (CIA 2005) * Co-located with the 28th German Conference on Artificial Intelligence (KI 2005) * Co-sponsored by Siemens, Germany; Whitestein Technologies, Switzerland; German Computer Society (GI); European Coordination Action for Agent-Based Computing (AgentLink III) ********************************************* IMPORTANT DATES Submission of papers *** EXTENDED: APRIL 18, 2005 *** Notification of authors: June 3, 2005 Camera-ready papers: June 20, 2005 Conference: September 11-13, 2005 ********************************************* Please find more information about Aims & Scope, Topics, and Submission Details on the conference website at http://www.mates2005.de/. The proceedings of MATES 2005 will be published as volume 3550 in the Springer series of Lecture Notes on Artificial Intelligence (LNAI). These proceedings are considered as joint proceedings with CIA 2005. MATES and CIA 2005 jointly issue a "MATES/CIA 2005 Best Paper Award". This award is sponsored by Siemens, Germany. CIA 2005 issues a "CIA 2005 System Innovation Award" to acknowledge and stimulate development of highly innovative systems of intelligent information agents. This award is sponsored by Whitestein Technologies, Switzerland. MATES 2005 provides limited financial support to a limited number of students who are co-authors of accepted papers to give their presentation at the MATES 2005 conference. *************************************************************** The MATES/CIA 2005 Organizational Board Matthias Klusch (DFKI Saarbruecken, D) Michael Huhns (U South Carolina, USA) Torsten Eymann (U Bayreuth, D) Franziska Kluegl (U Wuerzburg, D) Winfried Lamersdorf (U Hamburg, D) From foclasa05 at sol10.lcc.uma.es Fri Apr 1 10:02:32 2005 From: foclasa05 at sol10.lcc.uma.es (Foclasa 2005 (Carlos Canal)) Date: Fri Apr 1 17:43:30 2005 Subject: [Haskell] CfP FOCLASA'05 at CONCUR 2005: Foundations of Coordination Languages and Software Architectures Message-ID: <200504011502.j31F2W4t017154@sol10.lcc.uma.es> A non-text attachment was scrubbed... Name: not available Type: text Size: 6278 bytes Desc: not available Url : http://www.haskell.org//pipermail/haskell/attachments/20050401/4cefe7de/attachment-0001.bat From bogus@does.not.exist.com Fri Apr 1 17:35:35 2005 From: bogus@does.not.exist.com (clima VI ) Date: Fri Apr 1 17:43:30 2005 Subject: [Haskell] CLIMA VI :: new deadline April 15 Message-ID: <424C415B0008BB5A@vsmtp1.tin.it> (added by postmaster@virgilio.it) [Apologies for cross-postings. Please send to interested colleagues and students] ========================================================================== * DEADLINE EXTENSION * CLIMA VI Sixth International Workshop on Computational Logic in Multi-Agent Systems featuring: the First CLIMA Tutorial Programme and the First CLIMA Competition City University, London, UK, June 27-29, 2005 http://clima.deis.unibo.it/ * SUBMISSIONS OPEN UNTIL APRIL 15, 2005 * ========================================================================== From ozone at algorithm.com.au Sat Apr 2 00:55:55 2005 From: ozone at algorithm.com.au (Andre Pang) Date: Sat Apr 2 00:38:37 2005 Subject: [Haskell] Re: How to make Haskell more popular In-Reply-To: References: <25253.1112351333@cl.cam.ac.uk> <3d96ac180504011105111ab9ef@mail.gmail.com> Message-ID: <5eef6c282e96990dc03381a571c6d4f8@algorithm.com.au> On 02/04/2005, at 5:33 AM, S. Alexander Jacobson wrote: > FYI Perl 6 is being implemented in Haskell (in <4k of code!), so you > can do both! That statement is probably even closer to the truth than you think :). See http://svn.openfoundry.org/pugs/modules/SHA1/lib/SHA1.pm (note the use of 'inline Haskell' there ...), which wraps the SHA1 Haskell module: http://svn.openfoundry.org/pugs/modules/SHA1/src/SHA1.hs Perl 6 is indeed looking like something to phear, with a ph. It may be some of the best publicity that Haskell's ever got. -- % Andre Pang : trust.in.love.to.save From bright_sun at yahoo.com Sun Apr 3 14:31:37 2005 From: bright_sun at yahoo.com (Bright Sun) Date: Sun Apr 3 14:14:08 2005 Subject: [Haskell] Memoization in Haskell Message-ID: <20050403183137.11109.qmail@web53610.mail.yahoo.com> I can not understand memoization in Haskell. I can not find an example except the fib. For example, I want drop a list 4 times like, >drop 4 (drop 3 (drop 2 (drop 1 [1,2,3,4,5,6,7,8,9,10,11,12]))) >[11,12] can I implement a memoization funcation like >droploop [1,2,3,4] [1,2,3,4,5,6,7,8,9,10,11,12] to get same result >[11,12] so, if possible to do it? or any other example like it? Bright __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com From glynn at gclements.plus.com Sun Apr 3 22:59:41 2005 From: glynn at gclements.plus.com (Glynn Clements) Date: Sun Apr 3 22:42:16 2005 Subject: [Haskell] Memoization in Haskell In-Reply-To: <20050403183137.11109.qmail@web53610.mail.yahoo.com> References: <20050403183137.11109.qmail@web53610.mail.yahoo.com> Message-ID: <16976.44445.385394.203683@gargle.gargle.HOWL> Bright Sun wrote: > I can not understand memoization in Haskell. I can > not find an example except the fib. > > For example, I want drop a list 4 times like, > > >drop 4 (drop 3 (drop 2 (drop 1 > [1,2,3,4,5,6,7,8,9,10,11,12]))) > >[11,12] > > can I implement a memoization funcation like > > >droploop [1,2,3,4] [1,2,3,4,5,6,7,8,9,10,11,12] > to get same result > >[11,12] That isn't memoization. Memoization is where you record a set of prior argument/result pairs (i.e. a lookup table) to avoid having to perform the exact same calculation repeatedly. You can implement droploop as a fold, e.g.: droploop ns xs = foldr drop xs ns -- Glynn Clements From lpnmr05.publicity at mat.unical.it Mon Apr 4 06:22:57 2005 From: lpnmr05.publicity at mat.unical.it (lpnmr05.publicity@mat.unical.it) Date: Mon Apr 4 08:41:13 2005 Subject: [Haskell] LPNMR'05: Call for Systems and Applications Message-ID: <20050404102257.753D9FD077@ml.mat.unical.it> Call for Systems and Applications 8th International Conference on Logic Programming and Nonmonotonic Reasoning (LPNMR'05) Diamante/Cosenza, Italy September 5-8, 2005 http://www.mat.unical.it/lpnmr05/ As part of the technical program of LPNMR'05, we plan a special session devoted to presentations and demonstrations of LPNMR systems and LPNMR applications. Accepted contributions will be published as part of the regular conference proceedings in the Springer "Lecture Notes in Computer Science" series (with a limit of four to five pages). System descriptions should provide information on the theoretical background, features, and possibly implementation techniques, experimental evaluation, programming methodology and availability. Application descriptions should refer to concrete applications of LPNMR and describe design choices and decisions, interesting implementation issues, techniques, and methodology, experimental evaluation and availability. SUBMISSION OF PAPERS -------------------- Submissions must not exceed five pages including title page, references and figures. They must be written in English and formatted according to the Springer LNCS/LNAI authors' instructions. Final versions might be limited to four pages. Please e-mail your submission to lpnmr05@pfeifer.com as a MIME-attached PDF document. See for detailed instructions by the publisher. In case of questions, please contact Gerald Pfeifer . IMPORTANT DATES --------------- Submission Deadline May 1, 2005 Notification (Accept/Reject) June 1, 2005 Final Version June 10, 2005 Early Registration Deadline July 4, 2005 Conference Sep. 5-8, 2005 PROGRAM COMMITTEE ----------------- Gerald Pfeifer (chair) Marcello Balduccini Texas Tech University Yuliya Lierler Universität Erlangen Ilkka Niemelä Helsinki University of Technology Yuting Zhao Istituto Trentino di Cultura From jmj at info.fundp.ac.be Mon Apr 4 08:52:54 2005 From: jmj at info.fundp.ac.be (Jean-Marie JACQUET) Date: Tue Apr 5 07:15:02 2005 Subject: [Haskell] Coordination 2005: Final call for participation Message-ID: <200504041252.j34Cqsn23961@backus.info.fundp.ac.be> [ Our apologies for multiple copies. ] ====================================================================== Final Call for Participation COORDINATION 2005 7th International Conference on Coordination Models and Languages Namur, Belgium, 20-23 April 2005 http://www.coordination2005.org ====================================================================== SCOPE OF THE CONFERENCE Modern information systems rely increasingly on combining concurrent, distributed, mobile, reconfigurable and heterogenous components. New models, architectures, languages, verification techniques are necessary to cope with the complexity induced by the demands of today's software development. Coordination languages have emerged as a successful approach, in that they provide abstractions that cleanly separate behavior from communication, therefore increasing modularity, simplifying reasoning, and ultimately enhancing software development. Building on the success of the previous editions, this conference provides a well-established forum for the growing community of researchers interested in models, languages, architectures, and implementation techniques for coordination. PROGRAMME The program of the conference can be found at http://www.coordination2005.org It includes two invited talks by T. Lehman (IBM Almaden Research Center, USA) and J. Misra (University of Texas at Austin, USA) as well as three workshops on Coordination and Organisation, Database Interoperability, and Methods and Tools for Coordinating Concurrent, Distributed and Mobile Systems. CONFERENCE LOCATION The conference will be held at the Institute of Informatics, University ot Namur, Belgium. Capital of the Walloon Region, Namur is a beautiful city of 80.000 inhabitants. Its position at the confluent of two rivers gave it military and economic appeal, exploited by the Roman Empire and by many others since then. Much evidence of Namur's past can be visited nowadays, including the citadel, one of the greatest in Europe. Close to Brussels (60 km) and at the intersection of European railways and highways, Namur can be easily reached by road, train, and plane. Further information about the conference location may be found at the URL: http://www.coordination2005.org/travel.php CONFERENCE ACCOMMODATION AND REGISTRATION Information about accommodation (reserving rooms in hotels specially booked for Coordination 2005 attendees) and registration for Coordination 2005 and the affiliated workshops is available at http://www.coordination2005.org/registration.php PROGRAM COMMITTEE Co-Chairs Jean-Marie Jacquet University of Namur, Belgium jmj@info.fundp.ac.be www.info.fundp.ac.be/~jmj/ Gian Pietro Picco Politecnico di Milano, Italy picco@elet.polimi.it www.elet.polimi.it/upload/picco Members Farhad Arbab CWI, The Netherlands Luca Cardelli Microsoft Research, United Kingdom Gianluigi Ferrari University of Pisa, Italy Paola Inverardi University of l'Aquila, Italy Toby Lehman IBM Almaden Research Center, USA Ronaldo Menezes Florida Institute of Technology, USA Amy Murphy University of Lugano, Switzerland Andrea Omicini University of Bologna, Italy George Papadopoulos University of Cyprus, Cyprus Ernesto Pimentel University of Malaga, Spain Rosario Pugliese University of Firenze, Italy Antonio Porto New University of Lisbon, Portugal Carolyn Talcott SRI International, USA Sebastian Uchitel Imperial College, United Kingdom Jan Vitek Purdue University, USA Michel Wermelinger New University of Lisbon, Portugal The Open University, UK Herbert Wiklicky Imperial College, United Kingdom Alexander Wolf University of Colorado, USA Alan Wood University of York, United Kingdom Gianluigi Zavattaro University of Bologna, Italy From jgoerzen at complete.org Tue Apr 5 22:53:44 2005 From: jgoerzen at complete.org (John Goerzen) Date: Tue Apr 5 22:37:03 2005 Subject: [Haskell] ANN: MissingH 0.10.0 Message-ID: Announcing MissingH 0.10.0 New feature summary: * Compatibility with Hugs 2005xx and GHC 6.4. Compatibility with GHC 6.2 has been retained. Compatibility with Hugs 2003xx is mostly retained but not completely possible. * Tighter integration with Cabal. * Better installation instructions. * New parser for debian/control files and similar Debian commands (does not require Debian to build/run) * New parser for CSV files * New utility for Maybe type * New binary I/O utilities (readBinaryFile, writeBinaryFile) * Powerful new list mainpulation functions: wholeMap, fixedWidth * New function: epochToClockTime ------------------------- What is MissingH? ------------------------- It's a collection of Haskell-related utilities. It is an extension of my earlier work developing MissingLib for OCaml. You can download MissingH from http://quux.org/devel/missingh. There is a mirror, with a few days' lag, at http://ftp.debian.org/debian/pool/main/m/missingh. ------------------------- Major Features ------------------------- * Powerful Logging Framework for Haskell This framework provides a system of hierarchical loggers and modular handlers permitting fine-grained logging with a great deal of control and yet a simple and fast interface. It's based on log4j for Java and logging for Python. Also included is a native-Haskell Syslog client. * Versatile modules to simplify everyday tasks: + FTP client library + E-mail client library + MIME types library to determine MIME types from files or URLs + Configuration file parser/generator * IO utilities make it easier to work with line-based text files and binary files * IO object virtualization so you can use one set of code to work on files of many different types * Filesystem virtualization so you can access variuos items with the same ease as your system's filesystem * Network utilities to streamline connections * List utilities including association list tools, list splitting, truncation, and delimiter joining * String utilities including removal of leading or trailing whitespace, joining, splitting, and truncation * Other utilities for threads, parers, filenames, etc. * Printf utilities for formatting strings * GZip decompression * Hundreds of unit tests to verify proper functionality * DBM module abstraction From kswadi at cs.rice.edu Tue Apr 5 11:46:36 2005 From: kswadi at cs.rice.edu (Kedar Swadi) Date: Wed Apr 6 08:06:27 2005 Subject: [Haskell] CFP: The Second MetaOCaml Workshop Message-ID: <20050405154635.GC13528@cs.rice.edu> [Apologies for cross-postings. Please forward to interested colleagues] CALL FOR PAPERS =============== The Second MetaOCaml Workshop http://www.metaocaml.org/workshop05 To be held at GPCE'05 (Wednesday Sep 28, 2005, Tallinn, Estonia) MetaOCaml is a multi-stage extension of the widely used functional programming language OCaml. It provides a generic core for expressing macros, staging, and partial evaluation. As such, it also provides unique support for building aspect weavers in a statically typed setting. The workshop is a forum for discussing experience with using MetaOCaml as well as possible future developments for the language. The scope of the workshop includes all aspects of the design, semantics, theory, application, and implementation of MetaOCaml. The workshop welcomes reports on * novel applications (especially interpreters and aspect weavers), * extensions (macros, new language constructs, offshoring translations), * implementation techniques (compilation, RTCG), support (debugging, profiling), * educational use, * basic theory (staging annotations, static typing, static analysis, environment classifiers, etc). Each submission will be reviewed by at least three members of the Program Committee (PC). The PC will work to provide detailed and constructive comments to the authors. The workshop will only have informal proceedings, and is intended to be close in spirit to the Haskell, ML, and Scheme workshops. Based on author requests and PC decisions, authors will be given either 25-minute or 15-minute slots to present their ideas, either of which will be followed by 15 minutes of questions and discussion. At the end of the workshop, one hour will be allocated to an open discussion to review the outcomes of the meeting, and to discuss future challenges and directions for MetaOCaml. Submission: For uniformity, authors are encouraged to use the latest ACM SIGS conference style file (option 1). We also request that submissions be limited to 12 pages in this style. We ask that papers be submitted in PDF or Postscript forms through the online submission page at http://metaocaml.cs.rice.edu/submit.html. Important Dates: Submission deadline: June 13, 2005 until midnight GMT (Please use online form at http://www.metaocaml.org/workshop05) Notification of acceptance: July 11, 2005 Final versions posted at the workshop sites: October 20, 2005 Related Tutorial: A tutorial on Multi-stage Programming in MetaOCaml is also co-located at GPCE '05, and will be held one day before the workshop, on Tuesday, 27 September, 2005, details of which will be found at http://www.metaocaml.org/tutorial05 Registration: Registration for the workshop is part of registering for GPCE'05. The event is co-located with TFP 2005 and ICFP 2005, which already provides housing and transportation information. Program Committee: Cristiano Calcagno Imperial College Rowan Davies University of Western Australia Ralf Hinze Universität Bonn Oleg Kiselyov FNMOC, Monterey, CA, USA Xavier Leroy INRIA, Paris Emir Pasalic Rice University Jeremy Siek Indiana University, Bloomington Yannis Smaragdakis Georgia Tech Kedar Swadi Rice University (Chair) Walid Taha Rice University Stephanie Weirich University of Pennsylvania Hongwei Xi Boston University From wiiat at kis-lab.com Wed Apr 6 08:44:05 2005 From: wiiat at kis-lab.com (Jia Hu) Date: Wed Apr 6 08:26:28 2005 Subject: [Haskell] WI'05: Deadline Extended to April 18 Message-ID: <20050406122626.62BA0368204@www.haskell.org> [Apologies if you receive this more than once] Dear Colleague, In response to many requests for an extension, we are pleased to extend the paper submission deadline for WI 2005 to ** April 18 **. Submission can be done online at: http://www.comp.hkbu.edu.hk/WI05/ http://www.hds.utc.fr/WI05/ We look forward to receiving your submissions soon. With best regards, Andrzej Skowron PC chair of WI-IAT'05 ##################################################################### IEEE/WIC/ACM WEB INTELLIGENCE 2005 FINAL CALL FOR PAPERS ##################################################################### 2005 IEEE/WIC/ACM International Conference on Web Intelligence (WI'05) September 19-22, 2005 Compiegne University of Technology, France http://www.comp.hkbu.edu.hk/WI05/ http://www.hds.utc.fr/WI05/ Sponsored By IEEE Computer Society Web Intelligence Consortium (WIC) Association for Computing Machinery (ACM) ********************************************************************** - Paper submission NEW due: April 18, 2005 - Submission websites: http://www.comp.hkbu.edu.hk/WI05/ http://www.hds.utc.fr/WI05/ - Electronic submissions are required in the form of PDF or PS files ********************************************************************** Web Intelligence (WI) has been recognized as a new direction for scientific research and development to explore the fundamental roles as well as practical impacts of Artificial Intelligence (AI) (e.g., knowledge representation, planning, knowledge discovery and data mining, intelligent agents, and social network intelligence) and advanced Information Technology (IT) (e.g., wireless networks, ubiquitous devices, social networks, and data/knowledge grids) on the next generation of Web-empowered products, systems, services, and activities. It is one of the most important as well as promising IT research fields in the era of Web and agent intelligence. The 2005 IEEE/WIC/ACM International Conference on Web Intelligence (WI'05) will be jointly held with the 2005 IEEE/WIC/ACM International Conference on Intelligent Agent Technology (IAT'05 http://www.comp.hkbu.edu.hk/IAT05/, http://www.hds.utc.fr/IAT05). The IEEE/WIC/ACM 2005 joint conferences are sponsored and organized by IEEE Computer Society Technical Committee on Computational Intelligence (TCCI) (http://www.cs.uvm.edu/~xwu/tcci/index.shtml), Web Intelligence Consortium (WIC) (http://wi-consortium.org), and ACM-SIGART (http://www.acm.org/sigart/). +++++++ Topics +++++++ The topics and areas include, but not limited to: WI Topics * World Wide Wisdom Web (W4) Distributed Resources Optimization Goal-Directed Services Support Information and Knowledge Markets Knowledge Community Formation and Support Meta-Knowledge Discovery and Representation New Social Interaction Paradigms Problem Solver Markup Language (PSML) Regularities and Laws of W4 Search of Best Means and Ends Service Self-Aggregation Social and Psychological Contexts Web Inference Engine * Social Networks and Social Intelligence Entertainment Knowledge Community Formation and Support Link Topology and Site Hierarchy Intelligent Wireless Web Social Networks Mining Theories of Small-World Web Ubiquitous Computing Ubiquitous Learning Systems Virtual and Web Communities Web-Based Cooperative Work Web Site Clustering * Knowledge Grids and Grid Intelligence Brokering and Scheduling Knowledge Resources and Services Discovery Middleware Architectures and Tools On-Demand Planning and Routing Semantic Grids * Web Mining and Farming Context Sensitive Web Mining E-Mail Classification Data Warehousing Learning User Profiles Multimedia Data Mining Mining Data Streams Text Mining Web Farming and Warehousing Web Content Mining Web Information Clustering Web Information Indexing Web Log and Usage Mining Web Page Clustering and Mining Web Site Classification * Semantics and Ontology Engineering Ontology-Based Information Extraction and Retrieval Ontology-Based Web Mining Web-Based Ontology Learning Semantic Web * Web Agents Agent Networks and Topologies Coordination Distributed Problem Solving Global Information Foraging Macroscopic Behavior Modeling Mobile Agents Remembrance Agents Resource Intermediary and Coordination Mechanisms Self-Organization and Reproduction Trust Models for Web Agents * Web Services Matchmaking Middleware-Based Ubiquitous Services Service-Oriented Computing Web Service Reconfiguration Web Service Workflow Composition Grid Services * Web Information Filtering and Retrieval Automatic Cataloging and Indexing Clustering-Based Recommender Systems Collaborative Filtering Digital Library Distributed Web Search Hybrid Recommendation Information Retrieval Criteria and Evaluations Proxy and Cache Techniques Search Engines and Meta-search Engines Specifications for Web Information Extraction Process Web Crawling Systems Web Information Categorization and Ranking Web Prediction and Prefetching * Intelligent Human-Web Interaction Adaptive Web Interfaces Context-Aware Computing Learning User Profiles Multimedia Representation Personalized Interfaces Personalized Web Sites Social and Psychological Issues Visualization of Information and Knowledge * Web Support Systems Information Retrieval Support Systems Web Site Navigation Support Systems Recommender Support Systems Soft Computing (including neural networks, fuzzy logic, evolutionary computation, rough sets, and granular computing) and Uncertainty Management for WI Web-Based Decision Support Systems * Intelligent e-Technology Collaborative Filtering and Recommendation Business Intelligence Decentralized Community Communication Techniques E-Business and E-Commerce E-Community E-Finance E-Government E-Learning E-Publishing E-Science E-Service Intelligent Enterprise Portals Web-Based Direct Marketing and CRM Web-Based EDI Web Security, Integrity, Privacy and Trust ++++++++++++++++ Important Dates ++++++++++++++++ Electronic submission of full papers: ** April 3, 2005 ** Notification of paper acceptance: June 9, 2005 Workshop and tutorial proposals: June 9, 2005 Camera-ready of accepted papers: July 4, 2005 Workshops/Tutorials: September 19, 2005 Conference: September 20-22, 2005 ++++++++++++++++++++++++++++++++++++ On-Line Submissions and Publication ++++++++++++++++++++++++++++++++++++ High-quality papers in all WI related areas are solicited. Papers exploring new directions or areas will receive a careful and supportive review. All submitted papers will be reviewed on the basis of technical quality, relevance, significance, and clarity. Note that WI'05 will accept ONLY on-line submissions, containing PDF (PostScript or MS-Word) versions. The conference proceedings will be published by the IEEE Computer Society Press. WI'05 also welcomes Industry Track and Demo submissions, Workshop and Tutorial proposals. More detailed instructions and the On-Line Submission Form can be found from the WI'05 homepages: http://www.comp.hkbu.edu.hk/WI05/ or http://www.hds.utc.fr/WI05. A selected number of WI'05 accepted papers will be expanded and revised for inclusion in Web Intelligence and Agent Systems: An International Journal (http://wi-consortium.org/journal.html) and in Annual Review of Intelligent Informatics (http://www.wi-consortium.org/annual.html) The best paper awards will be conferred on the authors of the best papers at the conference. ++++++++++++++++++++++++ Conference Organization ++++++++++++++++++++++++ Conference Chairs: Pierre Morizet, University of Technology of Compiegne, France Jiming Liu, Hong Kong Baptist University, Hong Kong Program Chair: Andrzej Skowron, Warsaw University, Poland Steering Committee Chair: Ning Zhong, Maebashi Institute of Technology, Japan WI-Track Program Co-chairs: Rakesh Agrawal, IBM Almaden Research Center, USA Mike Luck, University of Southampton, UK Takahira Yamaguchi, Shizuoka University, Japan IAT-Track Program Co-chairs: Jean-Paul Barthes, University of Technology of Compiegne, France Lakhmi Jain, University of South Australia, Australia Ron Sun, Rensselaer Polytechnic Institute, USA WI-Track Program Vice Chairs: Matthias Klusch, German Research Center for Artificial Intelligence, Germany Joost Kok, Leiden University, The Netherlands Steve Willmott, Universitat Politccnica de Catalunya, Spain Ubbo Visser, Universitat Bremen, Germany Mario Cannataro, University "Magna Grecia" of Catanzaro, Italy Nick Cercone, Dalhousie University, Canada W. Lewis Johnson, University of Southern California, USA Lina Zhou, University of Maryland, Baltimore County, USA Massimo Marchiori, MIT Lab for Computer Science, USA Sankar K. Pal, Indian Statistical Institute, India Toyoaki Nishida, Kyoto University, Japan Einoshin Suzuki, Yokohama National University, Japan Chengqi Zhang, University of Technology, Sydney, Australia IAT-Track Program Vice Chairs: Barbara Dunin-Keplicz, Warsaw University, Poland Amal El Fallah-Segrougchni, University of Paris 6, France Eugenio Oliveira, University of Porto, Portugl Marek Sergot, Imperial College, UK Jeffrey M. Bradshaw, UWF/Institute for Human and Machine Cognition, USA Katia Sycara, Carnegie Mellon University, USA Maria Gini, University of Minnesota, USA Churn-Jung Liau, Academia Sinica, Taiwan Zhongzhi Shi, Chinese Academy of Sciences, China Liz Sonenberg, The University of Melbourne, Australia Industry/Demo-Track Chairs: Jianchang Mao, Yahoo! Inc., USA Toshiharu Sugawara, NTT Communication Science Laboratories, Japan Workshop Chair: Pawan Lingras, Saint Mary's University, Canada Tutorial Chair: Rineke Verbrugge, University of Groningen, NL Publicity Chairs: Jim Peters, University of Manitoba, Canada James Wang, Clemson University, USA Organizing Chair: Francois Peccoud, University of Technology of Compiegne, France Local Arrangement Chairs: Marie-Helene Abel, University of Technology of Compiegne, France Claude Moulin, University of Technology of Compiegne, France *** Contact Information *** wi-iat05@maebashi-it.org From thomas.bevan at gmail.com Wed Apr 6 23:18:23 2005 From: thomas.bevan at gmail.com (Thomas Bevan) Date: Wed Apr 6 23:00:44 2005 Subject: [Haskell] Latex and Bibtex Message-ID: <63ee8307050406201820c5568d@mail.gmail.com> Does anyone know of any work being done on Latex with Haskell? I am particularly interested in finding a Haskell replacement to Bibtex. Thanks. Tom From doaitse at cs.uu.nl Thu Apr 7 05:13:58 2005 From: doaitse at cs.uu.nl (Doaitse Swierstra) Date: Thu Apr 7 04:56:16 2005 Subject: [Haskell] Latex and Bibtex In-Reply-To: <63ee8307050406201820c5568d@mail.gmail.com> References: <63ee8307050406201820c5568d@mail.gmail.com> Message-ID: <7cada7f1b0530da3c3d3579e39c53609@cs.uu.nl> At least I can provide you with a bibtex parser written using the Utrecht Parser Combinators. As you will see from the text the bibtex format is actually quite intricate. Doaitse Swierstra -- $Header: /data/cvs-rep/uust/examples/bibtex-parser/BibtexParser.hs,v 1.8 2002/11/08 12:48:00 uust Exp $ -- $Name: $ (version name) {- Fast, Error Correcting Parser Combinators; Version: see Version History in same directory. - Copyright: S. Doaitse Swierstra Department of Computer Science Utrecht University P.O. Box 80.089 3508 TB UTRECHT the Netherlands swierstra@cs.uu.nl -} {- file: bibtex6.hs A parser for BibTeX using the UU parsing combinators Piet van Oostrum, Atze Dijkstra, Doaitse Swierstra (April 22, 2001) -} module Main where import UU.Parsing import UU.Parsing.CharParser import UU.Scanner.Position import System import Char showMessage (Msg exp pos action) = "\nParse error: " ++ show pos ++ "\n" ++ actionMessage ++ "\n" where actionMessage = case action of Insert s -> "expecting: " ++ show exp ++ "\nrepaired by inserting " ++ show s Delete s -> "expecting: " ++ show exp ++ "\nrepaired by deleting unexpected symbol " ++ show s Other m -> m parsebib filename -- e.g. parsebib "btxdoc.bib" = do res <- parseFile showMessage pBibData filename putStrLn ("\nResult:" ++ show (length res) ++ " bib items were parsed") main = do args <- getArgs if null args then putStr "BibtexParser \n" else parsebib (head args) -- ======================================================================== =============== -- ===== DATA TYPES ====================================================================== -- ======================================================================== =============== type BibParser = AnaParser Input Pair Char Pos type BibData = [ BibEntry] data BibEntry = Entry String (String, [Field]) -- kind keyword fieldlist | Comment String | Preamble [ValItem] | StringDef Field deriving Show type Field = (String, [ValItem]) data ValItem = StringVal String | IntVal Int | NameUse String deriving Show -- ======================================================================== =============== -- ===== PARSERS ======================================================================== = -- ======================================================================== =============== pBibData = pChainr ((\ entry _ right -> entry:right) <$> pBibEntry) ( [] <$ pList (allChars `pExcept` "@")) pBibEntry = ( Entry <$ pAt <*> pName <*> pOpenClose ( pKeyName <* pSpec ',' <+> pListSep_ng pComma pField <* (pComma `opt` ' ')) <|> Comment <$ pAt <* pKey "comment" <*> ( pCurly (pList (allChars `pExcept` "}")) <|> pParen (pList (allChars `pExcept` ")")) ) <|> Preamble <$ pAt <* pKey "preamble" <*> pOpenClose pValItems <|> StringDef <$ pAt <* pKey "string" <*> pOpenClose pField ) pField :: BibParser (String, [ValItem]) pField = pName <* pSpec '=' <+> pValItems pValItems = pList1Sep (pSpec '#') ( StringVal <$> pString <|> int_or_name <$> pName ) where int_or_name s = if all isDigit s then IntVal.(read::String->Int) $ s else NameUse s -- ======================================================================== =============== -- ===== LEXICAL STUFF =================================================================== -- ======================================================================== =============== pLAYOUT :: BibParser String pLAYOUT = pList (EOr [] `setfirsts` pAnySym " \t\r\n") pSpec c = pSym c <* pLAYOUT pParen p = pPacked (pSpec '(') (pSpec ')') p pCurly p = pPacked (pSpec '{') (pSpec '}') p pOpenClose p = pParen p <|> pCurly p pComma = pCostSym 4 ',' ',' <* pLAYOUT pAt = pSpec '@' allChars = (chr 1, chr 127, ' ') pName = pList1 ('a'<..>'z' <|> 'A'<..>'Z' <|> '0'<..>'9' <|> pAnySym "-_/") <* pLAYOUT pKeyName = pList1 ((chr 33, chr 127, ' ') `pExcept` ",=@" ) <* pLAYOUT pKey [s] = lift <$> (pSym s <|> pSym (toUpper s)) <* pLAYOUT pKey (s:ss) = (:) <$> (pSym s <|> pSym (toUpper s)) <*> pKey ss pKey [] = error "Scanner: You cannot have empty reserved words!" pString = let curlyStrings = stringcons <$> pSym '{' <*> pConc pStringWord <*> pSym '}' pStringWordDQ = lift <$> pStringCharDQ <|> curlyStrings pStringWord = lift <$> pStringChar <|> curlyStrings pStringCharDQ = allChars `pExcept` "\"{}" pStringChar = pStringCharDQ <|> pSym '\"' pConc = pFoldr ((++),[]) stringcons c1 ss c2 = [c1] ++ ss ++ [c2] in ( pSym '"' *> pConc pStringWordDQ <* pSym '"' <|> pSym '{' *> pConc pStringWord <* pSym '}' ) <* pLAYOUT lift c = [c] On 2005 apr 07, at 4:18, Thomas Bevan wrote: > Does anyone know of any work being done on Latex with Haskell? > > I am particularly interested in finding a Haskell replacement to > Bibtex. > > Thanks. > > Tom > _______________________________________________ > Haskell mailing list > Haskell@haskell.org > http://www.haskell.org/mailman/listinfo/haskell From thomas.bevan at gmail.com Thu Apr 7 10:46:49 2005 From: thomas.bevan at gmail.com (Thomas Bevan) Date: Thu Apr 7 10:29:08 2005 Subject: [Haskell] Latex and Bibtex In-Reply-To: <7cada7f1b0530da3c3d3579e39c53609@cs.uu.nl> References: <63ee8307050406201820c5568d@mail.gmail.com> <7cada7f1b0530da3c3d3579e39c53609@cs.uu.nl> Message-ID: <63ee8307050407074631dbf132@mail.gmail.com> Thanks, this was exactly the sort of thing I was looking for. From L.W.N.van.der.Torre at cwi.nl Wed Apr 6 09:30:31 2005 From: L.W.N.van.der.Torre at cwi.nl (Leon van der Torre) Date: Thu Apr 7 11:17:55 2005 Subject: [Haskell] CoOrg05: Call For Participation. Namur, April 23, 2005 Message-ID: <20050406133031.21FC935A90@altfluit.sen.cwi.nl> Call for Participation, Namur, April 23, 2005 1st International Workshop on Coordination and Organisation (CoOrg 2005) CoOrg 2005 is a one day workshop affiliated with the Seventh International Conference on Coordination Models and Languages (COORDINATION 2005), Namur, Belgium, April 20-23, 2005. (http://www.coordination2005.org) Preliminary program 08:30 - 09:30: registration 09:30 - 10:30: Andrea Omicini, Agens Faber: Toward a Theory of Artifacts for MAS (invited talk) 10:30 - 11:00: coffee-break 11:00 - 11:30: Alan Colman and Jun Han, On the autonomy of software entities and modes of organisation 11:30 - 12:00: Frank Goethals, Towards a comprehensive classification of dependencies 12:00 - 14:00: lunch 14:00 - 15:00: Mehdi Dastani, Coordination and composition of multi-agent systems (invited talk) 15:00 - 15:30: Estefania Argente, Vicente Julian, and Vicente Botti, From human to agent organizations 15:30 - 16:00: coffee-break 16:00 - 16:30: Cosmin Carabelea and Olivier Boissier, Coordinating agents in organizations using social commitments 16:30 - 17:00: Benjamin Gateau, Djamel Khadraoui, and Eric Dubois, MOISE-Inst: an organizational model for specifying rights and duties of autonomous agents 17:00 - 17:30: L.P.J. Groenewegen, A.W. Stam, P.J. Toussaint, and E.P. de Vink, Paradigm as organization-oriented coordination language 17:30 - 18:00: Alan Colman and Jun Han, Using associations aspects to implement organizational contracts Workshop goals Organizations embody a powerful way to coordinate complex behavior in human society. Different models of organisations exist, from bureaucratic systems based on norms to competitive systems based on markets. Moreover, organizational concepts allow to structure the behavior of complex entities in a hierarchy of encapsulated entities: departments structured in roles, organisations structured in departments, and interorganizational coordination structured in organizations. Organizations specify the interaction and communication possibilities of each of these entities, abstracting from the implementation of their behavior. Since these entities are autonomous, they can only be coordinated exogeneously. Organisational models have been popular in the last years in agent theory for modelling coordination in open systems, where departments and organisations are modelled as autonomous entities. This is also due to the need to ensure social order within MAS applications like Web Services, Grid Computing, and Ubiquitous Computing. In these settings, openness, heterogeneity, and scalability pose new challenges on traditional MAS organizational models. It becomes necessary to integrate organizational and individual perspectives and to promote the dynamic adaptation of models to organizational and environmental changes. Nowadays, practical applications of agents to organizational modeling are being widely developed. Moreover, organisational concepts are used frequently for coordination purposes in different areas of Computer Science. For example, roles are used in access control, conceptual modelling, programming languages and patterns. Contracts are used in design by contract, and services are used in web services and service level agreements. Message based communication is used in networking. Finally, coordination techniques are used in formal models of organisations to analyse or simulate them. In contrast, most coordination languages refer mostly to different kinds of metaphors, like blackboards, shared dataspaces, component composition and channels. Although coordination is usually said to be of a multidisciplinary nature, the links between organisations and coordination have never received proper attention at the coordination conferences. CoOrg 2005, as part of COORDINATION2005, will provide an excellent opportunity to meet researchers studying coordination and organisations in cognitive science, social sciences, agent theory, computer science, philosophy, etc., to discuss the current state of the art and identify potential future directions and research issues. Topics of interest The topics of this symposium include, but are not restricted to, the following: * organisational concepts and methods for coordination: o role based coordination o contract based coordination o coordination in normative multiagent systems o service oriented coordination * coordination techniques for organisations: o normative systems o markets o authority and power o trust * interorganisational coordination o control of autonomy in coordination o integration of organizations * applications of coordination and organisation: o multiagent social simulation models o organization based software engineering o organization oriented programming o organizational patterns Invited speakers Mehdi Dastani, Utrecht University Andrea Omicini, University of Bologna Proceedings The papers accepted for the symposium will be available at the workshop. Moreover, selected work will be published in a volume of ENTCS. Chairs Leon van der Torre, CWI Amsterdam, The Netherlands Guido Boella, Department of Computer Science, Universita' di Torino, Italy Program committee * Farhad Arbab - CWI Amsterdam and University Leiden * Frank de Boer - CWI Amsterdam and University Leiden * Guido Boella - Dipartimento di Informatica, Universita' di Torino (co-chair) * Olivier Boissier - Systemes Multi-Agents G2I, ENSM.SE Saint-Etienne * Cristiano Castelfranchi - Institute of Cognitive Sciences and Technologies (ISTC), Italy * Kevin Crowston - Syracuse University * Mehdi Dastani - University of Utrecht * Joris Hulstijn - Vrije Universiteit Amsterdam * Andrea Omicini - University of Bologna * Pierre-Yves Schobbens - Institut d'Informatique University of Namur * Carles Sierra - IIIA of the Spanish Research Council, Barcelona * Leon van der Torre - CWI Amsterdam (co-chair) On the web SYMPOSIUM WEBSITE: http://boid.info/CoOrg05 COORDINATION 2005 WEBSITE: http://www.coordination2005.org/ From jespera at diku.dk Wed Apr 6 09:53:44 2005 From: jespera at diku.dk (Jesper Andersen) Date: Thu Apr 7 11:17:56 2005 Subject: [Haskell] PAT2005 Summer School Announcement Message-ID: <20050406135344.74812380024@app-1.diku.dk> ======== Announcement of PAT2005 ======== Summer School: Program analysis and transformation Organized by: Computer Science Department (DIKU), University of Copenhagen, Denmark Monday-Friday 6-10 June, 2005 Summer School homepage: http://www.diku.dk/PAT2005/ This summer school on Program analysis and transformation will span theory and practice in the field. The overall theme is semantics-based program manipulation, in which practically-motivated operations on programs are solidly based in the semantics of the underlying programming languages. Research profile of the Summer School's topics: This research field began with classical compiler optimisations. These were pragmatically successful and well-automated, but lacking in semantic foundations. This led to the long-pursued goal of truly semantics-based generation of compilers and of abstract machines to implement programming languages. Parallel academic developments included more powerful and interesting program transformations that were developed by hand, one at a time. Major progress has been made in all three areas: semantically well-founded compiler optimisations have been devised and well-automated; compilers and abstract machines can now be generated by semantics-based methods including partial evaluation; and there now exist more powerful, general and well-founded program transformations. The speakers at this Summer School represent the state of the art in this research field. Confirmed speakers and their topics are: Mooly Sagiv (Israel: Tel Aviv) Program analysis using Three-Valued Logic Olivier Danvy (Denmark: Aarhus) On one-step reduction, evaluation, and abstract machines Oege De Moor (UK: Oxford) Incremental execution of transformation specifications Nick Benton, Microsoft Research Cambridge Semantics of static analyses and program transformations Neil Jones (Denmark: DIKU, Copenhagen) Size-change termination analysis of first and higher-order programs Torben Mogensen (Denmark: DIKU, Copenhagen) Introduction to partial evaluation; Program semi-inversion Arne Glenstrup (Denmark: ITU, Copenhagen) Tool tutorial for the Scheme partial evaluators PGG and Similix John Gallagher (Denmark: Roskilde) Program analysis and specialisation using tree automata Robert Glueck (Denmark: DIKU, Copenhagen) Program inversion Kazuhiko Kakehi (Japan: MIST, Tokyo Uniiversity) Attribute grammars and program transformations Prerequisites: Students should have some familiarity with classical compiler optimisations. A basic knowledge of operational semantics of programming languages (eg Structural operational semantics, Natural semantics or Action semantics) would be helpful. Sponsors: The PAT Summer School is partly supported by FIRST Graduate School: http://first.dk/ APPSEM-II: http://www.tcs.informatik.uni-muenchen.de/~mhofmann/appsem2/ Microsoft Research: http://research.microsoft.com/aboutmsr/labs/ Danish Natural Science Research Agency: http://www.forsk.dk Web pages: PAT home page: http://www.diku.dk/PAT2005/ (with details on lecture topics, speaker profiles, timetable, etc.) DIKU guest page: http://www.diku.dk/diku/gaester/index.html (with details on local transport, maps, hotels, etc.) Registration: The registration fee is DKK 1100 = EURO 150. This includes lecture materials, lunches and coffees, and a Summer School dinner. A block of rooms will be reserved at a hotel in central Copenhagen -- specifically, the new Cab Inn. Attendees are expected to arrange and pay for their own travel and lodging. Registration will Open: 5. April, 2005 Close: 20. May, 2005. Fee waivers: There will be a limited number of grants covering part or all of the registration fee. Application materials are available at the course's web page at the beginning of the registration period. Local Organisation Committee: Neil Jones neil(a)diku.dk Andrzej Filinski andrzej(a)diku.dk Torben Mogensen torbenm(a)diku.dk Jesper Andersen jespera(a)diku.dk Karin Outzen karino(a)diku.dk From icaps05 at mac.com Thu Apr 7 06:04:04 2005 From: icaps05 at mac.com (ICAPS'05) Date: Thu Apr 7 11:17:56 2005 Subject: [Haskell] [ICAPS 2005] Call for Participation Message-ID: [Apologies if you get multiple copies of this message] ============================================================== 15th International Conference on Automated Planning and Scheduling (ICAPS'05) June 6 - 10, Monterey, California, USA http://icaps05.icaps-conference.org Call for Participation ====================== The technical program of ICAPS 2005 has been completed and we cordially invite everyone interested in the area to participate. The technical sessions are complemented by a comprehensive workshop and tutorial program and highlighted by invited talks from Drew McDermott (Yale University, USA), Henry Kautz (University of Washington, USA), and Kim Larsen (Aalborg University, Denmark). The program details and registration information are available on the conference Web site. The early registration deadline is April 22nd. Information on hotel booking is also available for the limited rooms blocked at the conference rates. We look very much forward to seeing you in Monterey this coming June. Susanne Biundo, Karen Myers, Kanna Rajan ICAPS'05 co-chairs From thomas.bevan at gmail.com Fri Apr 8 05:58:55 2005 From: thomas.bevan at gmail.com (Thomas Bevan) Date: Fri Apr 8 05:41:13 2005 Subject: [Haskell] Latex and Bibtex In-Reply-To: <482fc8838ecf3b710c5bcfa932b65937@comlab.ox.ac.uk> References: <63ee8307050406201820c5568d@mail.gmail.com> <482fc8838ecf3b710c5bcfa932b65937@comlab.ox.ac.uk> Message-ID: <63ee830705040802587bb0556f@mail.gmail.com> Basically, my motivations are sa follows. No one as far as I can tell has produced a bibtex style which conforms to the Australian legal citation standard, the proper acronym escapes me for the moment. I decided that fiddling around with the bibtex language was no fun and pretty time consuming so I though I should be able to piece together some sort of solution in Haskell. On Apr 8, 2005 8:51 AM, Jeremy Gibbons wrote: > Hi there. I saw Doaitse's reply about a parser, but I'd be interested > in anything else you hear too. Will you post a summary to the Haskell > list? > > You know about Filliatre's bibtex2html, I presume? It isn't a > replacement for bibtex, but it runs bibtex and uses the output via an > OCaml program to generate html. > > I'm curious as to what your interest is. > > Cheers, > Jeremy > > On 7 Apr 2005, at 15:18, Thomas Bevan wrote: > > > Does anyone know of any work being done on Latex with Haskell? > > > > I am particularly interested in finding a Haskell replacement to > > Bibtex. > > > > Thanks. > > > > Tom > > _______________________________________________ > > Haskell mailing list > > Haskell@haskell.org > > http://www.haskell.org/mailman/listinfo/haskell > > > > Jeremy.Gibbons@comlab.ox.ac.uk > Oxford University Computing Laboratory, TEL: +44 1865 283508 > Wolfson Building, Parks Road, FAX: +44 1865 273839 > Oxford OX1 3QD, UK. > URL: http://www.comlab.ox.ac.uk/oucl/people/jeremy.gibbons.html > > From daan at cs.uu.nl Fri Apr 8 06:40:19 2005 From: daan at cs.uu.nl (Daan Leijen) Date: Fri Apr 8 06:22:42 2005 Subject: [Haskell] Haskell Workshop 2005: Call for papers Message-ID: <42565F93.9060603@cs.uu.nl> [I apologize for cross-postings. Please forward to interested colleagues] 2005 Haskell Workshop Tallinn, Estonia, 30 September, 2005 http://www.cs.uu.nl/~daan/hw2005 Call for papers -- Important Dates --------------------------------------------------- Submission deadline : June 10 Acceptance notification: July 5 Final version due : July 19 Haskell workshop : September 30 -- The Haskell Workshop ---------------------------------------------- The Haskell Workshop 2005 is an ACM SIGPLAN sponsored workshop affiliated with the 2005 International Conference on Functional Programming (ICFP). Previous Haskell Workshops have been held in La Jolla (1995), Amsterdam (1997), Paris (1999), Montreal (2000), Firenze (2001), Pittsburgh (2002), Uppsala (2003), and Snowbird (2004). -- Scope ------------------------------------------------------------- The purpose of the Haskell Workshop is to discuss experience with Haskell, and future developments for the language. The scope of the workshop includes all aspects of the design, semantics, theory, application, implementation, and teaching of Haskell. Topics of interest include, but are not limited to, the following: * Language Design, with a focus on possible extensions and modifications of Haskell as well as critical discussions of the status quo; * Theory, in the form of a formal treatment of the semantics of the present language or future extensions, type systems, and foundations for program analysis and transformation; * Implementations, including program analysis and transformation, static and dynamic compilation for sequential, parallel, and distributed architectures, memory management as well as foreign function and component interfaces; * Tools, in the form of profilers, tracers, debuggers, pre-processors, and so forth; * Applications, Practice, and Experience, with Haskell for scientific and symbolic computing, database, multimedia and Web applications, and so forth as well as general experience with Haskell in education and industry; * Functional Pearls, being elegant, instructive examples of using Haskell. Papers in the latter two categories need not necessarily report original research results; they may instead, for example, report practical experience that will be useful to others, re-usable programming idioms, or elegant new ways of approaching a problem. The key criterion for such a paper is that it makes a contribution from which other practitioners can benefit. It is not enough simply to describe a program! If there is sufficient demand, we will try to organise a time slot for system or tool demonstrations. If you are interested in demonstrating a Haskell related tool or application, please send a brief demo proposal to the program chair (daan@cs.uu.nl). -- Submissions ------------------------------------------------------- Authors should submit papers in postscript or portable document format (pdf), formatted for A4 paper, to Daan Leijen (daan@cs.uu.nl). The length should be restricted to 12 pages in standard ACM SIG proceedings format. In particular, LaTeX users should use the most recent sigplan proceedings style available from the Haskell workshop web-site. Furthermore, the "abbrv" style should be used for the bibliography. Accepted papers are published by the ACM and appear in the ACM digital library. Each paper should explain its contributions in both general and technical terms, clearly identifying what has been accomplished, explaining why it is significant, and comparing it with previous work. Authors should strive to make the technical content of their papers understandable to a broad audience. -- Program committee ------------------------------------------------- Martin Erwig Oregon State University John Hughes Chalmers University of Technology Mark Jones OGI School of Science and Engineering at OHSU Ralf L?mmel Microsoft Corp. Daan Leijen Universiteit Utrecht (Program Chair) Andres L?h Universiteit Utrecht Andrew Moran Galois Connections Inc. Simon Thompson University of Kent Malcolm Wallace University of York From haitao.wu at yale.edu Fri Apr 8 11:01:59 2005 From: haitao.wu at yale.edu (haitao.wu@yale.edu) Date: Fri Apr 8 10:44:16 2005 Subject: [Haskell] how to use GHC's prof tools Message-ID: <1112972519.42569ce743ff2@www.mail.yale.edu> Hi, I developed a program based on wxHaskell but it has serious performance problem. So I tried to compile the program using "-prof" in GHC. If I use "ghc --make -fglasgow-exts -package wx -prof Main.lhs", it always reports that it cannot find modules defined in wxHaskell like WXCore. However, if I compile it without the "-prof" option, it works well and can generate "a.out". Anyone can give any help? Thank you, Haitao From duncan.coutts at worc.ox.ac.uk Fri Apr 8 11:20:28 2005 From: duncan.coutts at worc.ox.ac.uk (Duncan Coutts) Date: Fri Apr 8 11:01:36 2005 Subject: [Haskell] how to use GHC's prof tools In-Reply-To: <1112972519.42569ce743ff2@www.mail.yale.edu> References: <1112972519.42569ce743ff2@www.mail.yale.edu> Message-ID: <1112973628.8272.662.camel@localhost> On Fri, 2005-04-08 at 11:01 -0400, haitao.wu@yale.edu wrote: > Hi, > > I developed a program based on wxHaskell but it has serious performance > problem. So I tried to compile the program using "-prof" in GHC. > > If I use "ghc --make -fglasgow-exts -package wx -prof Main.lhs", it > always reports that it cannot find modules defined in wxHaskell like > WXCore. However, if I compile it without the "-prof" option, it works > well and can generate "a.out". > > Anyone can give any help? The problem is that wxHaskell does not come with profiling versions of its libraries. You see, for GHC's profiling everything needs to be compiled with profiling support. This is because the profiling and non-profiling styles are not compatible, for example the profiling version adds extra hidden arguments to functions and various other things to actualy do the profiling. So for example the libraries that come with GHC itself have to copies, the profiling and non-porofiling verions. For many other libraries this is unfortunately not the case since the build infrastructure to produce two copies of everything is not so trivial to do (I think). You can probably rebuild wxHaskell with profiling support (though it may not be so trivial since the it changes the names of various files by adding _p extensions here and there so the build system may not like it). Ask about it on the wxHaskell list: wxhaskell-users@lists.sourceforge.net This leads onto a cabal feature request. Can we have a parameter to build profiling versions of libraries in addition to the normal version? Duncan From luc.maranget at inria.fr Fri Apr 8 14:08:59 2005 From: luc.maranget at inria.fr (Luc Maranget) Date: Fri Apr 8 13:51:17 2005 Subject: [Haskell] Post-Doc offers at Inria Message-ID: <20050408180859.GA26182@yquem.inria.fr> Hello, The moscova team at Inria Rocquencourt offers two Post-Doc positions. One is haskell-related (I also include the second offer, has little connection with Haskell). Candidates should hold a doctorate or Ph.D. for less than one year or be about to obtain one (ie, before September 1, 2005) Aplication deadline is April 22 (position starting in September). More information on the adminsitrative nature of the offer is available at As regards scientific matters, we offer two subjects. Interested candidates are invited to consult the web pages specified in the following abstracts for additional information, and to contact us. --Luc Maranget Pattern Matching Warnings for Haskell ************************************* Since Ocaml 1.05, Ocaml features an efficient and complete detection algorithm for pattern-matching anomalies such as useless match clauses and non-exhautive matchings. The corresponding theory is described in http://pauillac.inria.fr/~maranget/papers/warn.ps It also handles disjunctive patterns, without exponential explosion in practice. The post-doctorant will implement the detection algorithm in, for instance, GHC. She or he will demonstrate and document the work in order to make it available in a standard Haskell release. See Jocaml3 ******* Jocaml is an extension of Ocaml based on the Join-calculus, see http://join.inria.fr. There are already two releases of the Join-calculus and Jocaml. A third version, simplified and better integrated to the Ocaml compiler, is under development. It remains to implement remote communication in distributed settings, which represents a good third of the whole Jocaml implementation. As a final result, we want to get a release of Jocaml, accessible on the web and compatible with successive releases of Ocaml. See From conal at conal.net Fri Apr 8 18:54:17 2005 From: conal at conal.net (Conal Elliott) Date: Fri Apr 8 18:36:31 2005 Subject: [Haskell] pretty printing Haskell code with auto parens? Message-ID: <014d01c53c8d$e5455a30$0202a8c0@Conalputer> What pretty printers are available for Haskell code (not necessarily complete) that handle automatic insertion of minimally required parentheses? I assumed that Language.Haskell.Pretty did that, but apparently it relies on manual insertion of parentheses in the abstract syntax. Thanks, - Conal -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org//pipermail/haskell/attachments/20050408/2d56974a/attachment.htm From davve at dtek.chalmers.se Sun Apr 10 11:13:36 2005 From: davve at dtek.chalmers.se (David Waern) Date: Sun Apr 10 10:55:47 2005 Subject: [Haskell] [ANNOUNCE] First release of Haste (Haskell TurboEdit), an IDE for Haskell In-Reply-To: <20050410130750.GA3833@dtek.chalmers.se> References: <20050410130534.GA3037@dtek.chalmers.se> <20050410130750.GA3833@dtek.chalmers.se> Message-ID: <20050410151336.GA5848@dtek.chalmers.se> Hi there! We are a group of students at Chalmers University of Technology who are developing an IDE for Haskell called Haste (short for Haskell TurboEdit) as our third-year project. We have made the first release of the IDE available. If you are using Windows, you can simply get it by downloading a binary version from our homepage. If you are using some other OS, you must compile the source, which you can also find if you go to our homepage. The address is: http://haste.dyndns.org:8080 Note that this is an early pre-alpha build, so there are lots of things that still need to be fixed and added. Also, the IDE has so far only been tested on Windows and Linux. Details of the implementation: ------------------------------ For the GUI, we are using wxHaskell. For the editor component, we have ported and integrated the wxStyledTextCtrl from wxWidgets into wxHaskell. It might be included in the next release of wxHaskell if Daan Leijen has enough time. If you want to help: -------------------- We would relly appreciate if anyone is interested in contributing to this project. However, since it is a school project we have to be careful about how we let other people contribute. If you want to help us, you must work on your _own_, somewhat isolated component in the editor so that it is clear what we have done and what you have done on the project. Other than that, there are no problems with contributing. If you are interested, just contact us and we will supply you with a Subversion account. Cheers, David Waern From pinna at unisi.it Sun Apr 10 05:00:50 2005 From: pinna at unisi.it (g. michele pinna) Date: Mon Apr 11 05:50:29 2005 Subject: [Haskell] ICTCS'05 Conference: Deadline Extension Message-ID: Apologies if you receive multiple copies ________________________________________________________________ Ninth Italian Conference on Theoretical Computer Science (ICTCS'05) Certosa di Pontignano (Siena), Italy October 12 - 14, 2005 http://ictcs05.dsmi.unisi.it DEADLINE EXTENSION: APRIL 25 Call for Papers The Ninth Italian Conference on Theoretical Computer Science will take place at the Certosa di Pontignano (Siena), Italy. Papers presenting original contributions in any area of theoretical computer science are being sought. A special issue of the journal Theory of Computing Systems (formerly Mathematical System Theory) containing full versions of papers selected from the conference is planned. Details of this special issue will be provided to the authors of those papers that are accepted for presentation at the conference. Topics include (but are not limited to): analysis and design of algorithms, computability, computational complexity, cryptography, formal languages and automata, foundations of programming languages and program analysis, foundations of artificial intelligence and knowledge representation, foundations of web programming natural computing paradigms (quantum computing, bioinformatics), parallel and distributed computation, program specification and verification, term rewriting, theory of concurrency, theory of data bases, theory of logical design and layout, type theory, security, symbolic and algebraic computation, Program Committee: Michele Bugliesi (Venezia), Mario Coppo (Torino, Co-Chair), Pierluigi Crescenzi (Firenze), Giulia Galbiati (Pavia) Luisa Gargano (Salerno), Giorgio Ghelli (Pisa), Roberto Grossi (Pisa), Benedetto Intrigila (L'Aquila), Nicola Leone (Cosenza), Elena Lodi (Siena, Co-Chair), Flaminia Luccio (Trieste), Andrea Masini (Verona), Giancarlo Mauri (Milano-Bicocca), Corrado Priami (Trento), Geppino Pucci (Padova), Davide Sangiorgi (Bologna). Organizing Committee: Sara Brunetti (Siena), G. Michele Pinna (Cagliari - Siena, Chair), Elisa B.P. Tiezzi (Siena). Invited Speakers: Luca Cardelli (Microsoft Research, Cambridge, United Kingdom) Giuseppe Castagna (LIENS - ?cole Normale Sup?rieure, Paris, France) Nicola Santoro (School of Computer Science, Carleton University, Ottawa, Canada) Dates and Deadlines: Submission Deadline (extended): 25 April 2005 Acceptance Notification: 7 June 2005 Camera-ready deadline: 2 July 2005 Early registration deadline: 16 September 2005 Conference: 12-14 October 2005 Submissions: Authors are invited to submit electronically one copy of their draft paper, not exceeding fifteen pages. The paper should clearly indicate the results achieved, their significance, and their relation to other work in the area. Extended proofs can be placed in a clearly marked appendix. It is planned to publish the proceedings in the Springer Lecture Notes in Computer Science series. To uniform the submissions the authors are encouraged to use Latex and the Springer LNCS style (www.springer.de/comp/lncs) The web-based submission form is available at the page ictcs05.dsmi.unisi.it/submission.html. In case electronic submission is not possible, the authors should contact: Mario Coppo Dipartimento di Informatica, Universita' di Torino Corso Svizzera 185 I-10149 Torino, Italy email: coppo@di.unito.it Conference Page: This Call For Papers is available online at the conference web page ictcs05.dsmi.unisi.it Registration Details: The registration form will be reachable from the conference web page. A limited number of grants for students and young researchers covering the registration fees are available. Details for the applications are in the conference web page. From cklin at cs.pdx.edu Sun Apr 10 12:40:11 2005 From: cklin at cs.pdx.edu (Chuan-kai Lin) Date: Mon Apr 11 05:50:30 2005 Subject: [Haskell] Darcs and Haskell in practical use Message-ID: Hi all, Some of you may have heard about the darcs distributed revision control system (http://abridgegame.org/darcs/), which is written in Haskell. Recently Linus Torvalds, the creator of Linux, had decided to abandon the BitKeeper revision control system in favor of using an open-source system to manage his kernel source tree. Among the contenders are monotone, GNU Arch, svk, and darcs. >From reading the postings in the Linux kernel mailing list [1], I think darcs is pretty well regarded for its capabilities. After all, complex symbolic manipulations is one of Haskell's strong points. Some people complained that darcs is relatively difficult to build, but that is not a big problem either. The real show-stopper turns out to be performance: the Linux kernel tree is huge, and the intense development activities put a lot of stress on the revision control system, so the (slow) execution speed and (large) memory footprint of darcs makes it unsuitable for such purposes. Needless to say, having darcs host Linus' kernel tree would be an excellent exposure for our favorite language. BitKeeper went from obscure to well-known in a few years solely because of its use in the Linux kernel development effort. Maybe someone in the list would be interested in helping David Roundy out in tuning darcs? Regards, -- Chuan-kai Lin http://www.cs.pdx.edu/~cklin/ From zhaohui at cs.rhul.ac.uk Mon Apr 11 04:00:26 2005 From: zhaohui at cs.rhul.ac.uk (Zhaohui Luo) Date: Mon Apr 11 05:50:30 2005 Subject: [Haskell] RA position at Royal Holloway, Univ of London Message-ID: RESEARCH ASSISTANT Department of Computer Science Royal Holloway, University of London Applications are invited for the post of Research Assistant to join a team working on the EPSRC-funded project: "Pythagoras: Machine Support for Semi-formalised Proof Oriented Mathematics". This is an appointment for 12 months, commencing on 1 June 2005. The successful candidate will work with Professor Zhaohui Luo and is expected to have a PhD or to obtain a PhD degree soon in computer science, mathematics, or a related area. A strong background in one or more of the following areas would be of advantages, though not necessary: theorem proving type theory and associated proof assistants functional programming mathematics education The salary for the post is ?22,674 per annum inclusive of London Allowance. Information on the Department may be found at www.cs.rhul.ac.uk. Informal enquiries may be directed to Prof Zhaohui Luo (email: Zhaohui.Luo@cs.rhul.ac.uk; tel: +44-(0)1784-443431; URL: http://www.cs.rhul.ac.uk/~zhaohui/ ). Further details and an application form can be obtained from The Personnel Department, Royal Holloway, University of London, Egham, Surrey TW20 0EX; fax: 01784 473527; tel: 01784 414241; email http://www.rhul.ac.uk/Personnel/JobVacancies.htm. Please quote reference KB/004286. The closing date for receipt of applications is Friday 29th April 2005. From wnoise at ofb.net Mon Apr 11 14:30:45 2005 From: wnoise at ofb.net (Aaron Denney) Date: Mon Apr 11 14:17:45 2005 Subject: [Haskell] Re: Darcs and Haskell in practical use References: Message-ID: On 2005-04-10, Chuan-kai Lin wrote: > Maybe someone in the list would be interested in helping David Roundy > out in tuning darcs? Tuning is one thing, and certainly valuable, but the real problem is that it uses certain algorithms that fundamentally don't scale, primarily in conflict handling during merging or patch commutation. Now, with a small group of people, these are pretty easy to work around. For something like the group of contributors to the Linux Kernel, this is not the case. Dave _is_ working on the issue, and would undoubtedly welcome any insight people have on it. But it's going to require a broader skillset than "haskell performance tweaking". -- Aaron Denney -><- From events-admin at fmeurope.org Mon Apr 11 17:09:42 2005 From: events-admin at fmeurope.org (events-admin@fmeurope.org) Date: Tue Apr 12 06:00:09 2005 Subject: [Haskell] Formal Methods 2005: Call for Participation Message-ID: <12264.213.84.47.100.1113253782.squirrel@213.84.47.100> (With apologies for multiple copies) Formal Methods 2005 (FM'05) 18-22 July 2005 Newcastle upon Tyne, UK First Call for Participation www.csr.ncl.ac.uk/fm05 It is our pleasure to invite you to attend FM'05, the leading international conference for researchers and practitioners in formal methods for the development of computing systems. This year, the conference is being held at the University of Newcastle upon Tyne, UK on 18-22 July. Formal methods continue to have a major impact on systems and software engineering, especially in areas where dependability, security and trust matter. FM'05 aims to publish the latest developments of interest to researchers and practitioners alike. The outstanding programme of tutorials and workshops (listed overleaf) covers the range from circuit design, through high integrity programming to fault tolerance, architectures and automated reasoning. Wednesday 20th July is a special Industry Day, with a series of invited talks on experiences of formal methods going mainstream. The programme of around 30 research papers, announced in mid-April, will provide an opportunity to get up to date in all these areas and more. Alongside the tutorials, workshops and research symposium, there will be displays of tools, products, research projects and publishers. FM'05 is being held in one of England's most dynamic cities, famous for its captivating welcome, and situated at the heart of an historic and beautiful region. There will be plenty of opportunity for informal discussion: social activities include a reception at the Hatton Gallery and conference dinner in Alnwick Castle and Gardens. We look forward to welcoming you to Newcastle in July! John Fitzgerald, General Chair Ian Hayes, Andrzej Tarlecki, Programme Chairs TO REGISTER download a registration form from www.csr.ncl.ac.uk/fm05 or contact the Organiser: Claire Smith, Tel: +44 (0) 191 222 7999 Fax: +44 (0) 191 222 8788 Email:claire.smith@ncl.ac.uk --- --- --- --- --- --- --- --- OUTLINE OF EVENTS Full Scientific Programme 20-22 July Invited Speakers: Mathai Joseph (Tata Research & Development, Pune, India) Marie-Claude Gaudel (Universit? de Paris-Sud, France) Chris Johnson (University of Glasgow, UK) Industry Day 20 July: Formal Methods Going Mainstream - Costs, Benefits and Experiences contributions from Microsoft, Intel, Embedded Systems Institute, ETH Z?rich and Verum Consultants. Industry Day is sponsored by SAP Research. Co-located Conferences (18-19 July): Calculemus 2005 Formal Aspects of Security and Trust (FAST) 2005 Workshops (18-19 July): Grand Challenge Workshop on Dependable Systems Evolution Web Languages and Formal Methods (WLFM 2005) Overture - the future of VDM and VDM++ Practical Applications of Stochastic Modelling (PASM 2005) Workshop on Rigorous Engineering of Fault Tolerant Systems (REFT 2005) The Railway Domain (TRain 2005) Tutorials (18-19 July): The Spec# Programming System: an Overview Formal Aspects of Software Architecture Increasing Dependability of Smart Card Based Systems Perfect Developer SPARK Petri-nets and Role Models as Intermediate Level Tools for Asynchronous Circuit & Systems Design Verifying Industrial Control System Software Formal Engineering Methods for Industrial Software Development Modelling Languages Spectrum Formal Methods as a Unifying Basis for Electrical and Computer Engineering Design by Contract and Automatic Verification for Java with JML and ESC/Java 2 Introduction to CSP and FDR TO REGISTER download a registration form from www.csr.ncl.ac.uk/fm05 or contact the Organiser: Claire Smith, Tel: +44 (0) 191 222 7999 Fax: +44 (0) 191 222 8788 Email:claire.smith@ncl.ac.uk _______________________________________________ events mailing list events@fmeurope.org http://www.fmeurope.org/mailman/listinfo/events From fsen05 at ipm.ir Tue Apr 12 02:36:01 2005 From: fsen05 at ipm.ir (fsen05@ipm.ir) Date: Tue Apr 12 06:00:10 2005 Subject: [Haskell] Second Call for Papers for International Workshop on Foundations of Software Engineering (FSEN'05) Message-ID: <200504120635.j3C6ZvH05381@Chapar.NIC.IR> Our apologies if you have received multiple copies. ------------------------------------------------------------------------- Second Call for Papers IPM International Workshop on Foundations of Software Engineering (FSEN 2005) 1-3 October 2005, Tehran, Iran. http://cs.ipm.ac.ir/FSEN05 FSEN 2005 is an international workshop organized by the Institute for Studies in Theoretical Physics and Mathematics (IPM) in Iran (http://www.ipm.ac.ir). Workshop goals -------------- The aim of the workshop is to bring together researchers and practitioners working on different aspects of formal methods in software engineering. The specific goal is to facilitate transfer of experience, adaptation of methods, and where possible, collaboration between different groups. The topics may cover any aspect in formal methods, especially those related to advancing the application of formal methods in software industry and promoting their integration with practical engineering techniques. Topics of interest ------------------ The topics of this workshop include, but are not restricted to, the following: * Models of programs and systems * Software specification, validation and verification * Software architectures and their description languages * Object and multi-agent systems * Coordination and feature interaction * Integration of formal and informal methods * Integration of different formal methods * Component-based development * Service-oriented development * Model checking and theorem proving * Software and hardware verification * CASE tools and tool integration * Application to industrial cases Proceedings ----------- Accepted papers will be available at the workshop in a pre-proceedings published by IPM. A post-proceedings will be published in the Elsevier's ENTCS conference series. Selected papers will also be published in a special issue of a journal (to be confirmed). Best Paper Award ---------------- There will be an award for the best paper. Important Dates --------------- * June 1, 2005: Submissions deadline * July 15, 2005: Notification of authors * August 1, 2005: Camera ready copies deadline * October 1-3, 2005: FSEN workshop Submissions ----------- The length of each paper including figures and references must not exceed the maximum size of 15 ENTCS style pages. All papers must be submitted in PDF or postscript format. Papers are to be sent to the following email address: fsen05@ipm.ir. Submissions should explicitly state their contribution and their relevance to the theme of the workshop. Other criteria for selection will be originality, significance, correctness, and clarity. Simultaneous or similar submissions to other conferences or journals are not allowed. Workshop Chair -------------- Ali Movaghar Sharif University of Technology, Iran IPM, Iran PC Chairs --------- Farhad Arbab CWI, Netherlands Leiden University, Netherlands University of Waterloo, Canada Marjan Sirjani Tehran University, Iran IPM, Iran Local Organization Chair ------------------------ Marjan Sirjani Tehran University, Iran IPM, Iran Program committee ----------------- * Farhad Arbab - CWI, Netherlands; Leiden University, Netherlands; University of Waterloo, Canada * Mohammad Ardeshir - Sharif University of Technology, Iran * Christel Baier - University of Bonn, Germany * Frank de Boer - CWI, Netherlands; Leiden University, Netherlands * Marcello Bonsangue - Leiden University, Netherlands * Franck van Breugel - York University, Canada * James C. Browne - Texas University, USA * Michael Butler - University of Southampton, UK * Marsha Chechik - University of Toronto, Canada * Dennis Dams - Bell Labs, USA * Nancy Day - University of Waterloo, Canada * Maurizio Gabbrielli - University of Bologna, Italy * Yuri Gurevich - Microsoft Research, USA * Joost Kok - Leiden University, Netherlands * Marta Kwiatkawska, University of Birmingham, UK * Mohammad Reza Meybodi - AmirKabir University of Technology, Iran * Seyyed Hassan Mirian - Sharif University of Technology, Iran * Ali Movaghar - Sharif University of Technology, Iran; IPM, Iran * Andrea Omicini - University of Bologna, Italy * George Papadopoulos - University of Cyprus, Cyprus * Willem-Paul de Roever - University of Kiel, Germany * Jan Rutten - CWI, Netherlands; Vrije University Amsterdam, Netherlands * Mohsen Sharifi, Iran University of Science and Technology, Iran * Sandeep Shukla- Virginia Tech, USA * Marjan Sirjani - Tehran University, Iran; IPM, Iran * Alan Wassyng - McMaster University, Canada Invited Speakers ---------------- (to be confirmed) From joost.visser at di.uminho.pt Tue Apr 12 07:21:57 2005 From: joost.visser at di.uminho.pt (Joost Visser) Date: Tue Apr 12 07:04:07 2005 Subject: [Haskell] GTTSE Summer School: Early registration deadline April 15 Message-ID: <0a9a7e8dda25747ad187ce823a5f644a@di.uminho.pt> This is a reminder that the deadline for early registration for the Summer School on Generative and Transformational Techniques in Software Engineering (GTTSE 2005), to be held in Braga, Portugal, from July 4 to 8, 2005, is: *** Early Registration Deadline: April 15, 2005 *** Online registration can be done via the GTTSE website at: http://www.di.uminho.pt/GTTSE2005 For more details, please consult the website or the call for participation below. -- Dr. ir. Joost Visser | Departamento de Inform?tica phone +351-253-604461 | Universidade do Minho fax +351-253-604471 | mailto:Joost.Visser@di.uminho.pt mobile +351-91-6253618 | http://www.di.uminho.pt/~joost.visser ------------- Summer School on Generative and Transformational Techniques in Software Engineering 4 - 8 July, 2005, Braga, Portugal http://www.di.uminho.pt/GTTSE2005 SCOPE AND FORMAT The summer school brings together PhD students, lecturers, technology presenters, as well as other researchers and practitioners who are interested in the generation and the transformation of programs, data, models, meta-models, and documentation. This concerns many areas of software engineering: software reverse and re-engineering, model-driven approaches, automated software engineering, generic language technology, to name a few. These areas differ with regard to the specific sorts of meta-models (or grammars, schemas, formats etc.) that underly the involved artifacts, and with regard to the specific techniques that are employed for the generation and the transformation of the artifacts. The tutorials are given by renowned representatives of complementary approaches and problem domains. Each tutorial combines foundations, methods, examples, and tool support. The program of the summer school also features invited technology presentations, which present setups for generative and transformational techniques. These presentations complement each other in terms of the chosen application domains, case studies, and the underlying concepts. Furthermore, the program of the school also features a participants workshop. All students of the summer school will be invited to give a presentation about their ongoing work. They will be asked to submit a title and an abstract beforehand. The senior researchers present at the summer school will provide the students with feedback on their presentations. All summer school material will be collected in proceedings that are handed out to the participants. Formal proceedings will be compiled after the summer school, where all contributions are subjected to additional reviewing. The formal proceedings will be published in the Lecture Notes in Computer Science series of Springer. TUTORIALS * Don Batory (The University of Texas at Austin): Feature Oriented Programming * Ira Baxter (Semantic Designs Inc.): Compiling Fast XML reader/writers from DTDs using Program Transformations * Jean Bezivin (INRIA, LINA, University of Nantes): Metamodelling and Model Driven Software Development * Shigeru Chiba (Tokyo Institute of Technology): Program Transformation With Reflective and Aspect-Oriented Programming * Jean-Luc Hainaut (University of Namur): The Transformational Approach to Database Engineering * Zhenjiang Hu (University of Tokyo): Program Optimization and Transformation in Calculational Forms * Erik Meijer (Microsoft, Redmond): Object, relational, and XML mapping * Tom Mens (University of Mons-Hainaut): On the Use of Graph Transformations for Model Refactoring TECHNOLOGY PRESENTATIONS The purpose of the technology presentations is to supplement the theoretical knowledge acquired in the tutorials with practical knowledge of how generative and transformational tool support can be instrumental in solving software engineering problems. Technology presentations can include, but are not limited to demonstration of the features of a single tool. Rather, they include: * Reference to the concepts behind the technology * Application of the technology to a case study of non-trivial scale * Clear statement of benefits and limitations of the technology The participants will have ample opportunity to interact in informal manner with the technology presenters. Confirmed technology presentations: (Note: titles and authors abbreviated) * Mark van den Brand (CWI & HvA, The Netherlands) et al.: Applications of the ASF+SDF Meta-Environment * Martin Bravenboer (Utrecht University, The Netherlands) et al.: Domain-specific Language Embedding using Stratego/XT and MetaBorg * Thomas R. Dean (Queen's University, Canada): Applications of Agile Parsing To Web Services * Helena Galhardas (IST Tagus Park, Portugal): Data cleaning and transformation using te AJAX framework * Dirk Heuzeroth (sd&m AG, Germany) et al.: A Tool Suite for Invasive Software Composition * Frederic Jouault (Universit? de Nantes, France): Model Transformation and Weaving Tools in the AMMA Platform * Guenter Kniesel (University of Bonn): Refactoring based on Composable Conditional Program Transformations * Victor Winter (University of Nebraska at Omaha, USA): Software transformation with HATS' Higher-Order Transformation * Albert Zuendorf (University of Kassel, Germany): Model Driven Software Development with Fujaba * Mohammed El-Ramly (University of Leicester, UK) Forms2.NET - Migrating Oracle Forms to Microsoft .NET VENUE The summer school will be held in the northern region of Portugal, known as the Costa Verde. The region is known for its attractiveness in terms of climate, prices, and culture. The region is served by the Oporto international airport, providing direct flights to many major European cities. The event will take place in Hotel da Falperra, situated in the hills overlooking the city of Braga. Hotel da Falperra is a four star hotel that provides splendid seminar and leisure facilities including a swimming pool. The hotel is situated in a quiet and somewhat isolated mountain area, which promotes the interaction between senior and junior researchers. The hotel has good connections to the Braga city center (approx. 10 min). DEADLINES AND FEES * Early registration until April 15, registration fee EUR 450. * Late registration until June 1, registration fee EUR 600. The registration fee includes: * accommodation in double room in the 4 star Hotel da Falperra * breakfasts, lunch, and coffee breaks (5 days) * dinners, reception, and banquet (5 evenings) * social programme * tutorial material * airport shuttles Participants are expected to arrive on Sunday, July 3, and to be present during the entire summer school, which ends in the late afternoon of Friday, July 8. PARTICIPANT SELECTION The number of participants is limited to 100. We want to ensure a diverse, well-matched, and well motivated set of participants. Therefore, participants will be selected on the basis of the information they supply on their registration form. In particular, we will take into consideration the relevance of the summer school topics to your area of research and to those of your group. After receiving your registration form, you will receive notification of acceptance within two weeks, or you will be asked to provide some additional information. Together with the notification of acceptance, you will receive detailed payment instructions. When payment has been received, your registration will be confirmed. SUMMER SCHOOL CHAIRS * Ralf Laemmel (Program Chair), Microsoft Corp., Redmond, U.S.A. * Joao Saraiva (Program Chair), Universidade do Minho, Braga, Portugal. * Joost Visser (Organizing Chair), Universidade do Minho, Braga, Portugal. WEB SITE INCLUDING REGISTRATION http://www.di.uminho.pt/GTTSE2005 SPONSORS * Funda??o Oriente * Funda??o para a Ci?ncia e a Tecnologia * Springer-Verlag * Microsoft * Enabler * Software Improvement Group ------------- From martin.odersky at epfl.ch Tue Apr 12 13:07:38 2005 From: martin.odersky at epfl.ch (Martin Odersky) Date: Tue Apr 12 12:50:12 2005 Subject: [Haskell] Post-doc position in Martin Odersky's group, EPFL, Switzerland Message-ID: EPFL Lausanne Programming Methods Group Prof. Martin Odersky We have an open position for a postdoctoral researcher in the Programming Methods Group at EPFL. The research of our group is centered on Scala, a new programming language which fuses functional and object-oriented programming and which interoperates at the same time with Java and .NET. Scala pushes the state of the art in type systems for component abstractions and composition. It also provides many new concepts for web programming. Here are some of our current research directions: - Further developments in the Scala language design - High-level optimizations - Type systems for object-oriented and functional languages - Programming language support for XML - Component technology. - Reliable software, verification, testability. If you work in some of these research areas and are interested in both system building and theory, you will find an active and friendly research environment at Lausanne. The appointment is for one year initially with renewals possible up to three years. The position is open from June, 2005, but later starting dates can also be considered. Compensation is competitive at CHF 80K+ (1 CHF ~~ 0.83 U.S$), depending on age and experience. Informal inquiries about the position may be addressed to martin.odersky@epfl.ch. Formal applications should be sent by e-mail to the following address: Mme Yvette Dubuis yvette.dubuis@epfl.ch Tel. +41 21 693 5202 Fax +41 21 693 6660 To be guaranteed full consideration, applications should be received by May 15th, 2000. Applications should consist of a curriculum vitae, a publication list, and the names of three personal references. Please ask your references to send their letters directly to yvette.dubuis@epfl.ch. EPFL Lausanne is one of two federal universities in Switzerland. It has one of the most nationally diverse research, teaching and learning communities in Europe. Lausanne is situated in very attractive surroundings in the French-speaking part of Switzerland, on the shore of Lake Geneva, in close proximity to the Alps. From conal at conal.net Tue Apr 12 21:33:13 2005 From: conal at conal.net (Conal Elliott) Date: Tue Apr 12 21:15:17 2005 Subject: [Haskell] pretty printing Haskell code with auto parens? In-Reply-To: <014d01c53c8d$e5455a30$0202a8c0@Conalputer> Message-ID: <015501c53fc8$c2e95d90$0402a8c0@Conalputer> No reply yet. Alternatively, does anyone happen to have a HsExp->HsExp (for Language.Haskell.Syntax) pass that inserts disambiguating parentheses as needed, to be applied just before pretty-printing? Cheers, - Conal -----Original Message----- From: haskell-bounces@haskell.org [mailto:haskell-bounces@haskell.org] On Behalf Of Conal Elliott Sent: Friday, April 08, 2005 3:54 PM To: haskell@haskell.org Subject: [Haskell] pretty printing Haskell code with auto parens? What pretty printers are available for Haskell code (not necessarily complete) that handle automatic insertion of minimally required parentheses? I assumed that Language.Haskell.Pretty did that, but apparently it relies on manual insertion of parentheses in the abstract syntax. Thanks, - Conal -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org//pipermail/haskell/attachments/20050412/baaab319/attachment.htm From john at repetae.net Tue Apr 12 22:30:58 2005 From: john at repetae.net (John Meacham) Date: Tue Apr 12 22:13:00 2005 Subject: [Haskell] pretty printing Haskell code with auto parens? In-Reply-To: <015501c53fc8$c2e95d90$0402a8c0@Conalputer> References: <014d01c53c8d$e5455a30$0202a8c0@Conalputer> <015501c53fc8$c2e95d90$0402a8c0@Conalputer> Message-ID: <20050413023058.GA3877@momenergy.repetae.net> On Tue, Apr 12, 2005 at 06:33:13PM -0700, Conal Elliott wrote: > No reply yet. > > Alternatively, does anyone happen to have a HsExp->HsExp (for > Language.Haskell.Syntax) pass that inserts disambiguating parentheses as > needed, to be applied just before pretty-printing? There is one included in 'hatchet' which I have succescfully reused in other projects. A bug is that it doesn't refix infix patterns, but that should be easy to fix. http://www.cs.mu.oz.au/~bjpop/hatchet.html You will probably have to write something to collect fixities from imported modules. -- John Meacham - ?repetae.net?john? From chrisk at MIT.EDU Tue Apr 12 23:09:36 2005 From: chrisk at MIT.EDU (ChrisK) Date: Tue Apr 12 22:51:49 2005 Subject: [Haskell] Control.Monad.Writer as Python generator Message-ID: Hi, I was thinking to myself: What in Haskell would give me a "yield" command like a Python generator? And the answer was "tell" in Control.Monad.Writer -- and I wrote some simple examples (see below). Most Python code using yield would be translated to something much more idiomatic in Haskell than using Writer, or to something more complicated if it needed IO. I thought this interesting enough to put on the haskell mailing list and wiki since it seemed to be in neither place (I searched, but your searching may be better than mine). If there are no objections then I'll put this example on the wiki; any suggestions where on wiki to place it (e.g. MonadWriter)? === CUT HERE === import Control.Monad.Writer -- Some type signatures would need -fglasgow-exts to compile -- We only care about the Writer output, not the function return value asGenerator :: Writer [a] v -> [a] asGenerator writer = values where (_,values) = runWriter writer --yield :: (MonadWriter [a] m) => a -> m () yield x = tell [x] -- This allows several items to be yielded with one command --yieldMany :: (MonadWriter [a] m) => [a] -> m () yieldMany = tell zeros :: [Integer] zeros = asGenerator (do yield 0 yield 0 yield 0) zerosInf :: [Integer] zerosInf = asGenerator zeros' where zeros' = (yield 0 >>zeros') -- The Collatz sequence function foo :: (Integral a) => a -> a foo x = case (x `mod` 2) of 0 -> x `div` 2 1 -> (3*x+1) -- Uses "return ()" to end the list when 1 is reached --collatzW :: (MonadWriter [a] m, Integral a) => a -> m () collatzW x = do yield x case x of 1 -> return () _ -> collatzW (foo x) -- Keeps going, will repeat "1,4,2,1,.." if 1 is reached --collatzInfW :: (MonadWriter [a] m, Integral a) => a -> m t collatzInfW x = do yield x collatzInfW (foo x) --collatzGen :: (MonadWriter [a] (Writer [a]), Integral a) => a -> [a] collatzGen x = asGenerator (collatzW x) --collatzInfGen :: (MonadWriter [a] (Writer [a]), Integral a) => a -> [a] collatzInfGen x = asGenerator (collatzInfW x) -- And these can be combined collatz1 x = asGenerator (collatzW x >> yield 0 >> collatzW (x+1)) === CUT HERE === *Main> zeros [0,0,0] *Main> take 10 zerosInf [0,0,0,0,0,0,0,0,0,0] *Main> collatzGen 13 [13,40,20,10,5,16,8,4,2,1] *Main> take 100 $ collatzInfGen 13 [13,40,20,10,5,16,8,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2, 1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2, 1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1] *Main> collatz1 12 [12,6,3,10,5,16,8,4,2,1,0,13,40,20,10,5,16,8,4,2,1] From Malcolm.Wallace at cs.york.ac.uk Wed Apr 13 05:21:28 2005 From: Malcolm.Wallace at cs.york.ac.uk (Malcolm Wallace) Date: Wed Apr 13 05:04:17 2005 Subject: [Haskell] pretty printing Haskell code with auto parens? In-Reply-To: <015501c53fc8$c2e95d90$0402a8c0@Conalputer> References: <014d01c53c8d$e5455a30$0202a8c0@Conalputer> <015501c53fc8$c2e95d90$0402a8c0@Conalputer> Message-ID: <20050413102128.40daa6ed.Malcolm.Wallace@cs.york.ac.uk> "Conal Elliott" writes: > What pretty printers are available for Haskell code (not necessarily > complete) that handle automatic insertion of minimally required > parentheses? I assumed that Language.Haskell.Pretty did that, but > apparently it relies on manual insertion of parentheses in the abstract > syntax. The Hat tracing system has a pretty-printer for Haskell expressions that inserts minimal parentheses. However, the Haskell expressions themselves are not parsed, they are reconstructed from runtime trace data. Because of this, the "abstract syntax tree" has significant differences from a standard internal compiler representation. Nevertheless, you might find the pretty-printing code has some useful algorithm that you can rework for your own purposes. (Note that the PP combinator library is Wadler-style, not HughesPJ-style.) http://haskell.org/hat Regards, Malcolm From bka at iist.unu.edu Tue Apr 12 22:58:01 2005 From: bka at iist.unu.edu (Bernhard K. Aichernig) Date: Wed Apr 13 07:45:29 2005 Subject: [Haskell] Call for Papers - ICTAC05 (Hanoi) Message-ID: <425C8AB9.3020601@iist.unu.edu> Call for Papers - ICTAC05 INTERNATIONAL COLLOQUIUM ON THEORETICAL ASPECTS OF COMPUTING Hanoi, Vietnam - 17--21 October, 2005 http://www.iist.unu.edu/ictac05 ===================== BACKGROUND AND OBJECTIVES ICTAC is an International Colloquium on Theoretical Aspects of Computing founded by the International Institute for Software Technology of the United Nations University (UNU-IIST). The aim of the colloquium is to bring together practitioners and researchers from academia, industry and government to present research results, and exchange experience, ideas, and solutions for their problems in theoretical aspects of computing. We believe that this will help developing countries to strengthen their research, teaching and development in computer science and engineering, improve the links between developing countries and developed countries, and establish collaboration in research and education. The first ICTAC (ICTAC'04) was held in Guiyang, China. ICTAC'05 will have a technical program for five days including two days for tutorials and three days for a conference, and a training school for 5 days. The topics of the conference include, but are not limited to: - automata theory and formal languages - principles and semantics of programming languages - logics and their applications - software architectures and their description languages - software specification, refinement, and verification - model checking and theorem proving - formal techniques in software testing - models of object and component systems - coordination and feature interaction - integration of formal and engineering methods - service-oriented development - document-driven development - models of concurrency, security, and mobility - theory of parallel, distributed, and internet-based (grid) computing - real-time and embedded systems - type and category theory in computer science SPONSORS AND ORGANISATION ICTAC'05 will be organised jointly between the Institute of Information Technology of the Vietnamese Academy of Sciences and Technology (IoIT), the University of Technology of the Vietnam National University in Hanoi (UoT-VNU) and UNU-IIST. UNU-IIST, IoIT and UoT-VNU are also sponsors of ICTAC'05. There will be an one-week training school during 10--14 October 2005 before the conference. SUBMISSION AND PUBLICATION Submissions to the conference must not have been published or be concurrently considered for publication elsewhere. All submissions will be judged on the basis of originality, contribution to the field, technical and presentation quality, and relevance to the workshop. Papers should be written in English and not exceed 15 pages in LNCS format (see http://www.springer.de/comp/lncs/authors.html for details). The proceedings will be published by Springer in the Lecture Notes in Computer Science series by Springer-Verlag. A web site for uploading papers linked to the conference web page http://www.iist.unu.edu/ictac05 will be open at the appropriate time. All queries should be sent to: dvh@iist.unu.edu, or wirsing@informatik.uni-muenchen.de. IMPORTANT DATES - Submission deadline: 25 May 2005 - Acceptance notification: 1 July 2005 - Final version due: 25 July 2005 - Tutorial proposal submission deadline: 11 July 2005 - Tutorial proposal acceptance notification: 25 July 2005 - Tutorials: 17-18 October, 2005 - Conference dates: 19 -- 21 October, 2005 ADVISORY COMMITTEE Dines Bjorner, Singapore Manfred Broy, Germany Jifeng He, UNU-IIST Mathai Joseph, India Shaoying Liu, Japan Zhiming Liu, UNU-IIST Jim Woodcock, UK Jose Luiz Fiadeiro, UK Tobias Nipkow, Germany PUBLICITY CHAIR Bernhard K. Aichernig, UNU-IIST ORGANISING COMMITTEE Le Hai Khoi, IoIT (co-chair) Ho Si Dam, UoT-VNU (co-chair) Nguyen Tue, UoT-VNU Bui The Duy, UoT-VNU Le Quoc Hung, IoIT Do Nang Toan, IoIT Ngo Quoc Tao, IoIT PROGRAM COMMITTEE Marc Aiguier, France Keijiro Araki, Japan J.O.A. Ayeni, Nigeria Jay Bagga, USA Hubert Baumeister, Germany Michel Bidoit, France Jonathan Bowen, UK Victor A. Braberman, Argentina Cristian S. Calude, New Zealand Ana Cavalcanti, UK Yifeng Chen, UK Dang Van Hung, UNU-IIST (co-chair) Jim Davies, UK Janos Demetrovics, Hungary Jin Song Dong, Singapore Henning Dierks, Germany Do Long Van, Vietnam Marcelo F. Frias, Argentina Wan Fokkink, Netherlands Susanna Graf, France Valentin Goranko, South Africa Dimitar Guelev, Bulgaria Michael R. Hansen, Denmark Jozef Hooman, Netherlands Purush Iyer, USA Ryszard Janicki, Canada Takuya Katayama, Japan Maciej Koutny, UK Xuandong Li, China Antonia Lopes, Portugal Antoni Mazurkiewicz, Poland Hrushikesha Mohanty, India Ngo Quang Hung, USA Nguyen Cat Ho, Vietnam Paritosh Pandya, India Jean-Eric Pin, France Narjes Ben Rajeb, Tunisia R. Ramanujam, India. Anders P. Ravn, Denmark Gianna Reggio, Italy Wolfgang Reif, Germany Riadh Robbana, Tunisia Mark Ryan, UK Zaidi Sahnoun, Algeria Augusto Sampaio, Brazil Don Sannella, UK Bernhard Schaetz, Germany Andrea Maggiolo-Schettini, Italy Carolyn Talcott, USA P. S. Thiagarajan, Singapore Ji Wang, China Martin Wirsing, Germany (co-chair) Mingsheng Ying, China Jian Zhang, China Hongjun Zheng, USA -- Bernhard Aichernig, Research Fellow of UNU-IIST www.iist.unu.edu/~bka ---------------------------------------------------------------------- SEFM 2005: 3rd IEEE International Conference on Software Engineering and Formal Methods, Koblenz, Germany, 7.- 9. Sept. 2005 http://sefm2005.uni-koblenz.de ICTAC 2005: International Colloquium on Theoretical Aspects of Computing, Hanoi, Vietnam, 17-21 October, 2005 http://www.iist.unu.edu/ictac05/ From bravetti at cs.unibo.it Wed Apr 13 06:28:25 2005 From: bravetti at cs.unibo.it (Mario Bravetti) Date: Wed Apr 13 07:45:30 2005 Subject: [Haskell] WS-FM 2005 2nd Call For Papers (submission deadline extended to may 6) In-Reply-To: Message-ID: ====================================================================== 2nd International Workshop on Web Services and Formal Methods (WS-FM 2005) 1-3 September 2005, Versailles, France http://cs.unibo.it/WS-FM05 Co-located with EPEW'05 2nd European Performance Evaluation Workshop ====================================================================== SCOPE Web Services technology aims at providing standard mechanisms for describing the interface and the services available on the web, as well as protocols for locating such services and invoking them (e.g. WSDL, UDDI, SOAP). Innovations are moving towards two main directions: The first one tends to the definition of new standards that support the specification of complex services out of simpler ones (the so called Web Service orchestration and choreography). Several proposals have been already set up: BPML, XLANG and BizTalk, WSFL, WS-BPEL, WS-CDL, etc... The second approach consists of the design of new (meta-)Web Services to be exploited at run-time by other Web Services: e.g. managing the cooperation of Web Services or acting as dynamic registry services. Formal methods, which privide formal machinery for representing and analysing the behavior of communicating concurrent/distributed systems, may potentially play a fundamental role in the development of such innovations. First of all they may help in understanding the basic mechanisms (in terms of semantics) which characterize different orchestration and choreography languages and to focus on the essence of new features that are needed. Secondly they may provide a formal basis for reasoning about Web Service semantics (behaviour and equivalence): e.g. for realizing registry services where retrieval is based on the meaning of a service and not just a Web Service name. Thirdly also studies on formal coordination paradigms can be exploited for developing mechanisms for complex run-time Web Service coordination. Finally, given the importance of critical application areas for Web Services like E-commerce, the development of the Web Service technology can certainly take advantage from formal analisys of security properties and performance in concurrency theory. The aim of the workshop is to bring together researchers working on Web Services and Formal Methods in order to activate a fruitful collaboration in this direction of research. This, potentially, could also have a great impact on the current standardization phase of Web Service technologies. LIST OF TOPICS The topics of interest include, but are not limited to: - Protocols and standards for WS (SOAP, WSDL, UDDI, etc... ) - Languages and descripion methodologies for Coreography/Orchestration/Workflow (BPML, XLANG and BizTalk, WSFL, WS-BPEL, WS-CDL, YAWL, etc... ) - Coordination techniques for WS (transactions, agreement, coordination services, etc...) - Semantics-based dynamic WS discovery services (based on Semantic Web/Ontology techniques or other semantic theories) - Security, Performance Evaluation and Quality of Service of WS - Semi-structured data and XML related technologies - Comparisons with different related technologies/approaches SUBMISSIONS Submissions must be original and should not have been published previously or be under consideration for publication while being evaluated for this workshop. Papers are to be prepared in LNCS format and must not exceed 15 pages. Accepted original papers will be published in the workshop proceedings. It is planned to publish the proceedings in the Springer Lecture Notes in Computer Science (LNCS) series ( www.springeronline.com/lncs ). As done for the previous WS-FM'04 workshop, we intend to publish a journal special issue inviting full versions of papers selected among those presented at the workshop. IMPORTANT DATES May 6, 2005: Submission deadline (EXTENDED) June 10, 2005: Notification of acceptance June 20, 2005: Camera ready September 1-3, 2005: Workshop dates PROGRAM CO-CHAIRS Mario Bravetti and Gianluigi Zavattaro PROGRAM COMMITTEE: Marco Aiello University of Trento, Italy Jean-Pierre Banatre University of Rennes1 and INRIA, France Boualem Benatallah University of New South Wales, Australia Karthik Bhargavan Microsoft research Cambridge, UK Manfred Broy Technische Universitat Munchen, Germany Roberto Bruni University of Pisa, Italy Michael Butler University of Southampton, UK Fabio Casati HP Labs, USA Rocco De Nicola University of Florence, Italy Schahram Dustdar Wien University of Technology, Austria Gianluigi Ferrari University of Pisa, Italy Jose Luiz Fiadeiro University of Leicester, UK Peter Furniss Choreology Ltd, UK Stephanie Gnesi CNR Pisa, Italy Reiko Heckel University of Leicester, UK Nickolas Kavantzas Oracle Co., USA Leila Kloul Universit? de Versailles, France Mark Little Arjuna Technologies Limited, UK Natalia L?pez University Complutense of Madrid, Spain Roberto Lucchi University of Bologna, Italy Jeff Magee Imperial College London, UK Fabio Martinelli CNR Pisa, Italy Shin Nakajima National Institute of Informatics and JST, Japan Manuel Nunez University Complutense of Madrid, Spain Fernando Pelayo University of Castilla-La Mancha, Albacete, Spain Marco Pistore University of Trento, Italy Wolfgang Reisig Humboldt University, Berlin, Germany Vladimiro Sassone University of Sussex, UK Frank Van Breugel York University, Toronto, Canada Friedrich Vogt Technical University of Hamburg-Harburg, Germany From oktaviandi at gmail.com Wed Apr 13 11:15:15 2005 From: oktaviandi at gmail.com (Oktaviandi Hadi Nugraha) Date: Wed Apr 13 10:57:17 2005 Subject: [Haskell] Zipper Message-ID: Hi, Would it be possible to have a zipper (Huet) with multiple focuses? I've been wondering about this. Any help is much appreciated ^_^. Thx, Adi. -- "You must be the change you wish to see in the world." - Mahatma Gandhi "I cannot give you the formula for sucess, but i can give you the formula for failure - which is: Try to please everybody." - Herbert Bayard Swope From conal at conal.net Wed Apr 13 13:02:51 2005 From: conal at conal.net (Conal Elliott) Date: Wed Apr 13 12:44:54 2005 Subject: [Haskell] pretty printing Haskell code with auto parens? Message-ID: <006701c5404a$a0d1aaa0$0402a8c0@Conalputer> Never mind. I rolled my own. If you need a HsExp parens inserter, just holler. - Conal -----Original Message----- From: Conal Elliott [mailto:conal@conal.net] Sent: Tuesday, April 12, 2005 6:33 PM To: 'haskell@haskell.org' Subject: RE: [Haskell] pretty printing Haskell code with auto parens? No reply yet. Alternatively, does anyone happen to have a HsExp->HsExp (for Language.Haskell.Syntax) pass that inserts disambiguating parentheses as needed, to be applied just before pretty-printing? Cheers, - Conal -----Original Message----- From: haskell-bounces@haskell.org [mailto:haskell-bounces@haskell.org] On Behalf Of Conal Elliott Sent: Friday, April 08, 2005 3:54 PM To: haskell@haskell.org Subject: [Haskell] pretty printing Haskell code with auto parens? What pretty printers are available for Haskell code (not necessarily complete) that handle automatic insertion of minimally required parentheses? I assumed that Language.Haskell.Pretty did that, but apparently it relies on manual insertion of parentheses in the abstract syntax. Thanks, - Conal -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org//pipermail/haskell/attachments/20050413/6a2c5529/attachment.htm From zednenem at psualum.com Thu Apr 14 01:05:46 2005 From: zednenem at psualum.com (David Menendez) Date: Thu Apr 14 00:47:46 2005 Subject: [Haskell] Control.Monad.Writer as Python generator In-Reply-To: Message-ID: ChrisK writes: > I was thinking to myself: > What in Haskell would give me a "yield" command like a Python > generator? > > And the answer was "tell" in Control.Monad.Writer -- and I wrote some > simple examples (see below). Another possibility would be a continuation monad. import Control.Monad.Cont yield :: a -> Cont [a] () yield x = Cont (\c -> x : c ()) asGenerator :: Cont [a] v -> [a] asGenerator (Cont f) = f (const []) -- David Menendez | "In this house, we obey the laws | of thermodynamics!" From ashley at semantic.org Thu Apr 14 04:54:15 2005 From: ashley at semantic.org (Ashley Yakeley) Date: Thu Apr 14 04:37:26 2005 Subject: [Haskell] HCAR? Message-ID: Was there a call for HCAR contributions on this list? Did I miss it? -- Ashley Yakeley, Seattle WA From tomasz.zielonka at gmail.com Thu Apr 14 05:24:24 2005 From: tomasz.zielonka at gmail.com (Tomasz Zielonka) Date: Thu Apr 14 05:06:31 2005 Subject: [Haskell] HCAR? In-Reply-To: References: Message-ID: <20050414092423.GA1285@students.mimuw.edu.pl> On Thu, Apr 14, 2005 at 01:54:15AM -0700, Ashley Yakeley wrote: > Was there a call for HCAR contributions on this list? Did I miss it? The last one I can find in my mail archives was on Nov 10, 2004. Best regards Tomasz From niklas.broberg at gmail.com Thu Apr 14 05:25:58 2005 From: niklas.broberg at gmail.com (Niklas Broberg) Date: Thu Apr 14 05:07:56 2005 Subject: [Haskell] Ann: haskell-src-exts 0.2 Message-ID: Announcing haskell-src-exts 0.2: http://www.cs.chalmers.se/~d00nibro/haskell-src-exts haskell-src-exts (hsx) is an extension of the standard haskell-src package, and handles most common syntactic extensions to Haskell, including: * Multi-parameter type classes with functional dependencies * Empty data declarations * GADTs * Implicit parameters (ghc and hugs style) * Template Haskell (broken for 6.4 atm, needs redoing) and a few more. Apart from these standard extensions, it also handles regular patterns as per the HaRP extension (http://www.cs.chalmers.se/~d00nibro/harp) as well as HSP-style embedded XML syntax. Source code available through darcs. /Niklas From andres at cs.uu.nl Thu Apr 14 06:11:29 2005 From: andres at cs.uu.nl (Andres Loeh) Date: Thu Apr 14 05:47:41 2005 Subject: [Haskell] Call for Contributions -- HC&A Report (May 2005 edition) Message-ID: <20050414101129.GE30323@cs.uu.nl> Dear Haskellers, it is nearly time for the eighth edition of the ================================================================ Haskell Communities & Activities Report http://www.haskell.org/communities/ Submission deadline: 03 May 2005 (please send your contributions to hcar at haskell.org, in plain ASCII or LaTeX format) ================================================================ This is the short story: * If you are working on any project that is in some way related to Haskell, write a short entry and submit it to the me. * If you are interested any project related to Haskell that has not previously been mentioned in the HC&A Report, tell me, so that I can contact the project leaders and ask them to submit an entry. * Feel free to pass on this call for contributions to others that might be interested. More detailed information: The Haskell Communities & Activities Report is a bi-annual overview of the state of Haskell as well as Haskell-related projects over the last, and possibly the upcoming 6 months. If you have only recently been exposed to Haskell, it might be a good idea to browse the November 2004 edition -- you will find interesting topics described as well as several starting points and links that may provide answers to many questions. Contributions will be collected until the beginning of May. They will be compiled into a coherent report which will appear sometime during May. As always, this is a great opportunity to update your webpages, make new releases, announce of even start new projects, or to point at some developments you want every Haskeller to see! As the purpose of the report is to collect recent or current activities, we encourage you to update all existing summaries and reports. We will probably drop any topics that have not had any activity for the past year, i.e., since May 2004, but we would very much prefer you to present an updated description of the topic. Of course, new entries are more than welcome. Reports should generally be kept brief and informative, ranging from a few sentences to a few hundred words, to keep the whole report reasonably sized. Looking forward to your contributions, Andres (current editor) ----------------------------------- topics New suggestions for current hot topics, activities, projects, etc. are welcome - especially with names and addresses of potential contacts, but here is a non-exclusive list of likely topics (see also http://www.haskell.org/communities/topics.html ): General Haskell developments; Haskell implementations; Haskell extensions; Standardization and documentation; Haskell tutorials, howtos and wikis; Organisation of Haskell tool and library development; Haskell-related projects and publications; new research, fancy tools, long-awaited libraries, cool applications; Feedback from specialist mailing lists to the Haskell community as a whole; Haskell announcements; all (recent) things Haskell Announcements: if you've announced anything new on the Haskell list over the last six months, you'll want to make sure that is reflected in this edition! Project pings: if you're maintaining a Haskell tool or library or somesuch, you'll want to let everyone know that it is still alive and actively maintained, even if there have been no new additions, but all the more if there have been new developments. Tutorials: if you've fought with some previously undocumented corner of Haskell, and have been kind enough to write down how you did manage to build that graphical user interface, or if you've written a tutorial about some useful programming techniques, this is your opportunity to spread the word (short, topic-specific, and hands-on tutorials that only show how to achieve a certain practical task would do a lot to make things easier for new Haskellers - please write some!) Applications: if you've been working quietly, using Haskell for some interesting project or application (commercial or otherwise), you might want to let others know about what you're using Haskell for, and about your experiences using the existing tools and libraries; are you using Haskell on your job? An interesting thread about using Haskell and more generally functional programming for non-Haskell things seems to recur with reasonable frequency - why not write a sentence or two about your use of Haskell for our report? Feedback: if you're on one of the many specialist Haskell mailing lists, you'll want to report on whatever progress has been made there (GUI API discussions, library organisation, etc.) If you're unsure whether a contact for your area of work has come forward yet, have a look at the report's potential topics page, or get in touch with me. I have contacted last time's contributors, hoping they will volunteer to provide updates of their reports, and will update the contacts on the topics page fairly regularly. But where you don't yet see contacts listed for your own subject of interest, you are very welcome to volunteer, or to remind your local community/project team/mailing list/research group/etc. that they really ought to get their act together and let the Haskell community as a whole know about what they've been doing! :-) -------------------------- what should I write? That depends on your topic, but as a general rule, it shouldn't take you long. A simple sentence or two about your use of Haskell could go into the "Individual Haskellers and their projects" section. If you're a company, or if you're working on a project using Haskell as the implementation language, a paragraph on that could go into the "Commercial Applications" and "Non-Commercial Applications" sections. A typical summary report about a tool/library/project/application/... would be between 1 and 3 paragraphs of ASCII text (what's it about? major topics and results since the last report? current hot topics? major goals for the next six months?) plus pointers to material for further reading (typically to a home page, or to mailing list archives, specifications and drafts, implementations, meetings, minutes, ...). For those who prefer templates to fill in, the report is edited in LaTeX, and an entry template might look something like this: \begin{hcarentry}{} \report{} \status{} \makeheader \FurtherReading \url{} \end{hcarentry} Browsing through previous editions should give you a good idea of the variety of possibilities, ranging from very brief to extensive. From tomasz.zielonka at gmail.com Thu Apr 14 06:53:38 2005 From: tomasz.zielonka at gmail.com (Tomasz Zielonka) Date: Thu Apr 14 06:35:42 2005 Subject: [Haskell] HCAR? In-Reply-To: <20050414092423.GA1285@students.mimuw.edu.pl> References: <20050414092423.GA1285@students.mimuw.edu.pl> Message-ID: <20050414105338.GA1361@students.mimuw.edu.pl> On Thu, Apr 14, 2005 at 11:24:24AM +0200, Tomasz Zielonka wrote: > On Thu, Apr 14, 2005 at 01:54:15AM -0700, Ashley Yakeley wrote: > > Was there a call for HCAR contributions on this list? Did I miss it? > > The last one I can find in my mail archives was on Nov 10, 2004. I've got the new announce now. Best regards Tomasz From uwe at fh-wedel.de Thu Apr 14 10:40:08 2005 From: uwe at fh-wedel.de (Uwe Schmidt) Date: Thu Apr 14 10:23:06 2005 Subject: [Haskell] ANNOUNCE: Haskell XML Toolbox Version 5.01 Message-ID: <200504141640.08994.uwe@fh-wedel.de> Haskell XML Toolbox 5.01 I would like to announce a new version of the Haskell XML Toolbox for processing XML including a validating parser and a new XPath module. new features: * works with ghc-6.4 * more flexible and cleaner arrow interface for XML filter * cabal installation More information and download: http://www.fh-wedel.de/~si/HXmlToolbox/index.html Please email comments, bugs, etc. to hxmltoolbox@fh-wedel.de Uwe Schmidt -- University of Applied Sciences, Wedel, Germany http://www.fh-wedel.de/~si/index.html From chrisk at MIT.EDU Thu Apr 14 12:29:38 2005 From: chrisk at MIT.EDU (ChrisK) Date: Thu Apr 14 12:11:50 2005 Subject: [Haskell] Control.Monad.Writer as Python generator In-Reply-To: References: Message-ID: <4609725d92cdc59f1770ab91101f864e@mit.edu> Thanks for the Cont example, David. But... The MonadCont is clever and it works ... but then fails -- ghci does not garbage collect and it blows up. With the MonadCont version I can count up to 10^7 zeros: *Main> length $ take (10^7) zerosInf 10000000 (26.20 secs, 0 bytes) But this increases RSIZE of ghc-6.4 to 165MB. The 10^8 version goes to swap space and I had to kill it. My original MonadWriter version does not increase RSIZE when run (constant space), so the garbage collection must be working, and it is O(N) in the # of zeros counted: *Main> length $ take (10^7) zerosInf 10000000 (1.22 secs, 0 bytes) *Main> length $ take (10^8) zerosInf 100000000 (10.05 secs, 0 bytes) *Main> length $ take (10^9) zerosInf 1000000000 (109.83 secs, 6 bytes) -- Chris On Apr 14, 2005, at 1:05 AM, David Menendez wrote: > ChrisK writes: > >> I was thinking to myself: >> What in Haskell would give me a "yield" command like a Python >> generator? >> >> And the answer was "tell" in Control.Monad.Writer -- and I wrote some >> simple examples (see below). > > Another possibility would be a continuation monad. > > import Control.Monad.Cont > > yield :: a -> Cont [a] () > yield x = Cont (\c -> x : c ()) > > asGenerator :: Cont [a] v -> [a] > asGenerator (Cont f) = f (const []) > -- > David Menendez | "In this house, we obey the > laws > | of thermodynamics!" From cgibbard at gmail.com Fri Apr 15 00:43:41 2005 From: cgibbard at gmail.com (Cale Gibbard) Date: Fri Apr 15 00:25:37 2005 Subject: [Haskell] Control.Monad.Writer as Python generator In-Reply-To: <4609725d92cdc59f1770ab91101f864e@mit.edu> References: <4609725d92cdc59f1770ab91101f864e@mit.edu> Message-ID: <89ca3d1f05041421431365996b@mail.gmail.com> However, after compiling with optimisations turned on, there is no such problem with the continuation-based version, memory usage appears constant. - Cale On 4/14/05, ChrisK wrote: > Thanks for the Cont example, David. But... > > The MonadCont is clever and it works ... but then fails -- ghci does > not garbage collect and it blows up. > With the MonadCont version I can count up to 10^7 zeros: > > *Main> length $ take (10^7) zerosInf > 10000000 > (26.20 secs, 0 bytes) > > But this increases RSIZE of ghc-6.4 to 165MB. The 10^8 version goes to > swap space and I had to kill it. My original MonadWriter version does > not increase RSIZE when run (constant space), so the garbage collection > must be working, and it is O(N) in the # of zeros counted: > > *Main> length $ take (10^7) zerosInf > 10000000 > (1.22 secs, 0 bytes) > *Main> length $ take (10^8) zerosInf > 100000000 > (10.05 secs, 0 bytes) > *Main> length $ take (10^9) zerosInf > 1000000000 > (109.83 secs, 6 bytes) > > -- > Chris > From simonpj at microsoft.com Fri Apr 15 11:03:35 2005 From: simonpj at microsoft.com (Simon Peyton-Jones) Date: Fri Apr 15 10:45:32 2005 Subject: [Haskell] Do you use GHC? Message-ID: <036EAC76E7F5EC4996A3B3C3657D4116022C271E@EUR-MSG-21.europe.corp.microsoft.com> Dear Haskell folk, PLEASE READ THIS IF YOU USE THE Glasgow Haskell Compiler (GHC). I virtually never send messages to overlapping sets of lists, but I'm doing so this time, because I'd really like to get to everyone who uses GHC. Here at GHC HQ, we are often asked how many people use GHC, and what kind of folk they are. Since GHC is free software, we have no clue. Download stats tell us a bit, but not much, because GHC gets out through a variety of other routes too (e.g. Debian). We also have little idea about which aspects of GHC are most valued, nor of what enhancements would be most sought after, or which platforms are most important to you. We hear quite a bit from the bleeding-edge folk who push the limits, but much less from people who just want to get the job done. Thus motivated, Tomasz Zielonka kindly put together a (WASH-powered) survey for us, which asks you to tell us a bit yourself and how you use GHC. We've had about 230 responses so far; thank you to those 230 folk. But I'm pretty certain there are more than 230 people in the world who use GHC! THIS MESSAGE IS TO ASK YOU TO TAKE 5 MINS TO COMPLETE THE SURVEY http://www.haskell.org/ghc/survey/start.cgi We'd like to hear from *absolutely everyone* who uses GHC: whether you are a first-year undergraduate or a famous professor; whether you use GHC for industrial applications or recreation; whether you use higher-rank polymorphism or have only just learned what functional programming is. Everyone! We'll use the information to guide our future priorities, and we'll publish some kind of summary of what we learn in due course. It's all anonymous, of course, unless you choose to say who you are. If you think it's appropriate, please circulate this announcement locally, e.g. to your students who may not be on the Haskell mailing list Many thanks Simon PJ and Simon Marlow From chrisk at MIT.EDU Fri Apr 15 12:03:01 2005 From: chrisk at MIT.EDU (ChrisK) Date: Fri Apr 15 11:45:06 2005 Subject: [Haskell] Control.Monad.Writer as Python generator In-Reply-To: <89ca3d1f05041421431365996b@mail.gmail.com> References: <4609725d92cdc59f1770ab91101f864e@mit.edu> <89ca3d1f05041421431365996b@mail.gmail.com> Message-ID: You are correct. Moand.Cont yield even runs without -O optimizing, just slower: Monad.Writer counts 10^9 zeros in 99 seconds (user time) Monad.Cont counts 10^8 zero in 35 seconds user time. So the writer is 3.5 times faster without '-O' With -O Monad.Writer counts 10^9 zeros in 105 seconds Monad.Cont counts 10^8 zeros in 11 seconds, 10^9 zeros in 110 seconds. So with '-O' they are the same speed. Nice. Anyone have an idea why ghci can't garbage collect it? Is this an actual bug or an innate quirk of the REPL ? -- Chris On Apr 15, 2005, at 12:43 AM, Cale Gibbard wrote: > However, after compiling with optimisations turned on, there is no > such problem with the continuation-based version, memory usage appears > constant. > > - Cale > > On 4/14/05, ChrisK wrote: >> Thanks for the Cont example, David. But... >> >> The MonadCont is clever and it works ... but then fails -- ghci does >> not garbage collect and it blows up. >> With the MonadCont version I can count up to 10^7 zeros: >> >> *Main> length $ take (10^7) zerosInf >> 10000000 >> (26.20 secs, 0 bytes) >> >> But this increases RSIZE of ghc-6.4 to 165MB. The 10^8 version goes >> to >> swap space and I had to kill it. My original MonadWriter version does >> not increase RSIZE when run (constant space), so the garbage >> collection >> must be working, and it is O(N) in the # of zeros counted: >> >> *Main> length $ take (10^7) zerosInf >> 10000000 >> (1.22 secs, 0 bytes) >> *Main> length $ take (10^8) zerosInf >> 100000000 >> (10.05 secs, 0 bytes) >> *Main> length $ take (10^9) zerosInf >> 1000000000 >> (109.83 secs, 6 bytes) >> >> -- >> Chris >> From ddarius at hotpop.com Fri Apr 15 15:18:19 2005 From: ddarius at hotpop.com (Derek Elkins) Date: Fri Apr 15 15:00:30 2005 Subject: [Haskell] Control.Monad.Writer as Python generator In-Reply-To: References: <4609725d92cdc59f1770ab91101f864e@mit.edu> <89ca3d1f05041421431365996b@mail.gmail.com> Message-ID: <20050415151819.00005414@home> On Fri, 15 Apr 2005 12:03:01 -0400 ChrisK wrote: > You are correct. Moand.Cont yield even runs without -O optimizing, > just slower: > > Monad.Writer counts 10^9 zeros in 99 seconds (user time) > Monad.Cont counts 10^8 zero in 35 seconds user time. > So the writer is 3.5 times faster without '-O' > > With -O > Monad.Writer counts 10^9 zeros in 105 seconds > Monad.Cont counts 10^8 zeros in 11 seconds, 10^9 zeros in 110 seconds. > > So with '-O' they are the same speed. Nice. > > Anyone have an idea why ghci can't garbage collect it? > Is this an actual bug or an innate quirk of the REPL ? GHCi does not "compile" with optimizations, without -O the strictness analyzer isn't run. The difference is most likely due to strictness analysis. A well placed strictness annotation or two should be able to make it work in GHCi as well. A similar situation occurs with sum: in GHCi for large inputs it overflows the stack, but when compiled with -O it works correctly, this is because sum is defined with foldl and not foldl' in GHC. From gramlich at logic.at Fri Apr 15 15:31:53 2005 From: gramlich at logic.at (Bernhard Gramlich) Date: Fri Apr 15 15:13:43 2005 Subject: [Haskell] FroCoS 2005: Last Call for Papers Message-ID: [Apologies for multiple copies] ---------------------------------------------------------------------------- FroCoS 2005: LAST CALL FOR PAPERS ---------------------------------------------------------------------------- NEW: Submission site: http://www.logic.at/frocos05/submit/ Invited speakers (complete list) SUBMISSION DEADLINE APPROACHING: May 2, 2005 (abstracts) May 9, 2005 (papers) ---------------------------------------------------------------------------- 5th International Workshop on Frontiers of Combining Systems (FroCoS 2005) Vienna, Austria, September 19-21, 2005 http://www.logic.at/frocos05/ ---------------------------------------------------------------------------- BACKGROUND In various areas of computer science, such as logic, computation, program development and verification, artificial intelligence, and automated reasoning, there is an obvious need for using specialized formalisms and inference mechanisms for special tasks. In order to be usable in practice, these specialized systems must be combined with each other, and they must be integrated into general purpose systems. The development of general techniques and methods for the combination and integration of special formally defined systems, as well as for the analysis and modularization of complex systems has been initiated in many areas. The International Workshop on Frontiers of Combining Systems (FroCoS) traditionally focuses on this type of research questions and activities and aims at promoting progress in the field. The previous FroCoS workshops were held in Munich (1996), Amsterdam (1998), Nancy (2000) and Santa Margherita Ligure (2002). In 2004, FroCoS joined IJCAR 2004, the 2nd International Joint Conference on Automated Reasoning. Like its predecessors, FroCoS 2005 wants to offer a common forum for research activities in the general area of combination, modularization and integration of systems (with emphasis on logic-based ones), and of their practical use. TOPICS Typical topics of interest include (but are not limited to): * combination of logics (e.g., modal logics, logics in AI, ...); * combination of decision procedures, of satisfiability procedures, and of constraint solving techniques (e.g. unification and matching algorithms, general symbolic constraints, numerical constraints); * combinations and modularity in term rewriting; * integration of equational and other theories into deductive systems (e.g. theory resolution, constraint resolution, constraint paramodulation, ...); * combination of deduction systems and computer algebra; * integration of data structures (e.g., sets, multisets, lists) into CLP formalisms and deduction processes; * model/problem analysis and decomposition (e.g. isolating tractable or loosely connected sub-problems, global constraints design, etc.) * hybrid methods for deduction, resolution and constraint propagation (e.g., combinations of local and global, complete and propagation techniques) * hybrid systems in computational linguistics, knowledge representation, natural language semantics, and human computer interaction; * logical modelling of multi-agent systems; * logical aspects of combining and modularizing programs and specifications. INVITED SPEAKERS * Luca de Alfaro (U California, Santa Cruz) * Silvio Ghilardi (U Milano) * Fausto Giunchiglia (U Trento & ITC-IRST) * Eric Monfroy (U Nantes & UTFSM/Chile) SUBMISSIONS The programme committee seeks high-quality submissions that are original and not submitted for publication elsewhere. Submission is electronic in postscript or PDF format. Submitted papers must conform to the Springer LNCS style, preferably using LaTeX2e and the Springer llncs class files. Submission categories include full papers, for work on foundations, applications, implementation techniques, and problem sets (up to 15 pages), as well as system descriptions (up to 8 pages), for describing publicly available systems. The submission deadline is May 2, 2005 for titles and abstracts, and May 9, 2005 for papers. For further information and submission instructions see the FroCoS 2005 web page: http://www.logic.at/frocos05/. PROCEEDINGS Accepted papers will appear in the proceedings of the conference, published as a volume of the Lecture Notes in Artificial Intelligence (LNAI) series, Springer-Verlag. Proceedings will be available at the time of the conference. IMPORTANT DATES May 2, 2005: Deadline for electronic submission of abstract May 9, 2005: Deadline for electronic submission of papers June 20, 2005: Notification of acceptance/rejection Jul 11, 2005: Deadline for final versions of accepted papers Sep 19-21, 2005: Conference PROGRAM COMMITTEE * Alessandro Armando (U Genova) * Franz Baader (TU Dresden) * Clark W. Barrett (NYU New York) * Frederic Benhamou (LINA, U Nantes) * Michel Bidoit (LSV, CNRS & ENS Cachan) * Jacques Calmet (U Karlsruhe) * Juergen Giesl (RWTH Aachen) * Bernhard Gramlich (chair) (TU Wien) * Deepak Kapur (UNM Albuquerque) * Maarten Marx (U Amsterdam) * Joachim Niehren (INRIA Futurs, U Lille) * Christophe Ringeissen (LORIA-INRIA Nancy) * Manfred Schmidt-Schauss (U Frankfurt) * Cesare Tinelli (U Iowa) * Ashish Tiwari (SRI Menlo Park) * Frank Wolter (U Liverpool) ORGANIZING COMMITTEE * Aneta Binder * Bernhard Gramlich * Franziska Gusel * Gernot Salzer * Jana Srna PROGRAM COMMITTEE AND CONFERENCE CHAIR Bernhard Gramlich TU Wien, Fakultaet fuer Informatik, Theory and Logic Group Favoritenstr. 9 - E185/2, A-1040 Wien, Austria Email: frocos05@logic.at FURTHER INFORMATION FroCoS 2005 web page: http://www.logic.at/frocos05/ ---------------------------------------------------------------------------- From chrisk at MIT.EDU Fri Apr 15 18:07:05 2005 From: chrisk at MIT.EDU (ChrisK) Date: Fri Apr 15 17:49:09 2005 Subject: [Haskell] Control.Monad.Writer as Python generator In-Reply-To: <20050415151819.00005414@home> References: <4609725d92cdc59f1770ab91101f864e@mit.edu> <89ca3d1f05041421431365996b@mail.gmail.com> <20050415151819.00005414@home> Message-ID: <3921f5bbb4e2718e86c3089bc91d1fa0@mit.edu> >> You are correct. Moand.Cont yield even runs without -O optimizing, >> just slower >> ... >> Anyone have an idea why ghci can't garbage collect it? >> Is this an actual bug or an innate quirk of the REPL ? > > GHCi does not "compile" with optimizations, without -O the strictness > analyzer > isn't run. The optimizer is irrelevant to whether it runs in constant space, as ghc without '-O' runs it just fine. The optimizer is only useful for speed, which is not the issue. > The difference is most likely due to strictness analysis. A well > placed strictness annotation or two should be able to make it work in > GHCi as > well. In this code, adding a strictness $! did not work. > A similar situation occurs with sum: in GHCi for large inputs it > overflows the stack, but when compiled with -O it works correctly, > this is > because sum is defined with foldl and not foldl' in GHC. As for adding one strictness annotation, the brute for approach to adding '$!' did not work: yield :: a -> Cont [a] () -- original --yield x = Cont (\c -> x : c () ) -- original in prefix form --yield x = Cont (\c -> (((:) x) (c ()))) -- memory exhaustion -- non-trivial --yield x = Cont (\c -> (((:) x) $! (c ()))) -- stack overflow -- silly --yield x = Cont (\c -> (((:) $! x) (c ()))) -- memory exhaustion -- definitely silly --yield x = Cont (\c -> (((:) x) (c $! ()))) -- memory exhaustion So adding two '$!' to the above looks like a non-starter. The asGenerator definition is asGenerator :: Cont [a] v -> [a] asGenerator (Cont f) = f (const []) which has no useful place to insert a '$!'. So to use continuations in GHCI, it may be necessary to build a new version of Cont and its internals, or maybe use the callCC interface? And I had not luck adding '$!' to callCC/Cont or callCC/mapCC versions: -- yield using callCC yieldCC x = callCC genContCCArg where genContCCArg = (\oldGenContFunc -> let newCont = Cont { runCont = newRunCont } newRunCont = (\contFunc -> (x:(oldRunCont contFunc))) oldRunCont = runCont oldCont oldCont = oldGenContFunc () in newCont ) -- Use the mysterious mapCont function yieldM x = callCC genContCCArg where genContCCArg = (\genContFunc -> mapCont (\xs -> x:xs) (genContFunc ())) I found no useful explanation of mapCont via Google. It was another case of deriving the function's action from the type. Since this is now a "gchi problem", should this be taken to the ghc mailing list as well? instead? -- Chris From tting.wang at gmail.com Fri Apr 15 19:03:22 2005 From: tting.wang at gmail.com (ting wang) Date: Fri Apr 15 18:45:18 2005 Subject: [Haskell] big integer in haskell Message-ID: <4260483A.2030401@gmail.com> Hello all, I am a new learner, and i am trying to write a function to calculate factorial of a natural number: (I use ghc 6.4, window xp) fac :: Int -> Int fac n | n == 0 = 1 | n > 0 = fac (n-1) * n | otherwise = 0 this works when n < 14 and result is 1278945280, when n > 14 the answer is not right n = 15 result is 2004310016. I know it is maybe because of overflow. So i calclate 2^32, 2^64, 2^128 the result correct and is much bigger as 14!,Why? 2^n use some big integer or my implementation of n! is not correct, I'm really confused. Someone can help me? Thanks Ting Wang From jmaessen at alum.mit.edu Fri Apr 15 19:03:34 2005 From: jmaessen at alum.mit.edu (Jan-Willem Maessen) Date: Fri Apr 15 18:45:30 2005 Subject: [Haskell] Control.Monad.Writer as Python generator In-Reply-To: <3921f5bbb4e2718e86c3089bc91d1fa0@mit.edu> References: <4609725d92cdc59f1770ab91101f864e@mit.edu> <89ca3d1f05041421431365996b@mail.gmail.com> <20050415151819.00005414@home> <3921f5bbb4e2718e86c3089bc91d1fa0@mit.edu> Message-ID: On Apr 15, 2005, at 6:07 PM, ChrisK wrote: >>> You are correct. Moand.Cont yield even runs without -O optimizing, >>> just slower >>> ... >>> Anyone have an idea why ghci can't garbage collect it? >>> Is this an actual bug or an innate quirk of the REPL ? >> >> GHCi does not "compile" with optimizations, without -O the strictness >> analyzer >> isn't run. > > The optimizer is irrelevant to whether it runs in constant space, as > ghc without '-O' runs it just fine. The optimizer is only useful for > speed, which is not the issue. Not true! The optimizer can change the asymptotic space consumption of your program. The example of sum is particularly germaine. If we write: x = foldl (+) 0 [1..n] this will, as it is evaluated, generate the suspended computation (((....((((0 + 1) + 2) + 3) + ...) + n This require O(n) space. Whereas the strict foldl' will evaluate each parenthesized expression as it is encountered: (0+1) = 1 (1+2) = 3 (3+3) = 6 (6+4) = 10 ... (... + n) = your answer If only we all used mostly-eager evaluation, these kinds of confusions would [almost] never happen. -Jan-Willem Maessen > From chrisk at MIT.EDU Fri Apr 15 19:23:45 2005 From: chrisk at MIT.EDU (ChrisK) Date: Fri Apr 15 19:05:47 2005 Subject: [Haskell] Control.Monad.Writer as Python generator In-Reply-To: References: <4609725d92cdc59f1770ab91101f864e@mit.edu> <89ca3d1f05041421431365996b@mail.gmail.com> <20050415151819.00005414@home> <3921f5bbb4e2718e86c3089bc91d1fa0@mit.edu> Message-ID: <3fe30bad9a5c41659a6211f4942d74e7@mit.edu> On Apr 15, 2005, at 7:03 PM, Jan-Willem Maessen wrote: > > On Apr 15, 2005, at 6:07 PM, ChrisK wrote: > >>>> You are correct. Moand.Cont yield even runs without -O optimizing, >>>> just slower >>>> ... >>>> Anyone have an idea why ghci can't garbage collect it? >>>> Is this an actual bug or an innate quirk of the REPL ? >>> >>> GHCi does not "compile" with optimizations, without -O the >>> strictness analyzer >>> isn't run. >> >> The optimizer is irrelevant to whether it runs in constant space, as >> ghc without '-O' runs it just fine. The optimizer is only useful for >> speed, which is not the issue. > > Not true! The optimizer can change the asymptotic space consumption > of your program. The example of sum is particularly germaine. If we > write: > > x = foldl (+) 0 [1..n] > > this will, as it is evaluated, generate the suspended computation > (((....((((0 + 1) + 2) + 3) + ...) + n > > This require O(n) space. > I was writing in the context of the yield with Monad.Cont example. The 'it' in 'whether it run in constant space' is the yield example of "length $ take (10^7) zerosInf". Nothing more general. So I agree with your statement, that asymptotic space consumption can change with optimization. The odd thing is that ghc (without -O) compiles and run the example in question, but ghci will fail. So I was wondering if there was an implementation of yield using continuations that would make yield space efficient in ghci. Perhaps I should also check hugs, but I have not used hugs yet. -- Chris From claus.reinke at talk21.com Fri Apr 15 19:46:00 2005 From: claus.reinke at talk21.com (Claus Reinke) Date: Fri Apr 15 19:23:22 2005 Subject: [Haskell] big integer in haskell References: <4260483A.2030401@gmail.com> Message-ID: <014701c54215$48a13cc0$f2dd7ad5@vaio> Hi, the difference is that you restrict your function to Int, whereas the default type is Integer. See: http://www.haskell.org/onlinereport/decls.html#sect4.3.4 and http://www.haskell.org/onlinereport/basic.html#sect6.4 hth, claus btw, you can ask ghci to give you the type of each expression you evaluate: Prelude> :set +t Prelude> 2^128 340282366920938463463374607431768211456 cmTypeOfName: it it :: Integer Prelude> 2^128 :: Int 0 cmTypeOfName: it it :: Int Prelude> maxBound :: Int 2147483647 cmTypeOfName: it it :: Int Prelude> maxBound :: Integer :1:0: No instance for (Bounded Integer) arising from use of `maxBound' at :1:0-7 Probable fix: add an instance declaration for (Bounded Integer) In the expression: maxBound :: Integer In the definition of `it': it = maxBound :: Integer ----- Original Message ----- From: "ting wang" To: Sent: Saturday, April 16, 2005 12:03 AM Subject: [Haskell] big integer in haskell > Hello all, > I am a new learner, and i am trying to write a function to calculate > factorial of a natural number: > (I use ghc 6.4, window xp) > fac :: Int -> Int > fac n > | n == 0 = 1 > | n > 0 = fac (n-1) * n > | otherwise = 0 > this works when n < 14 and result is 1278945280, when n > 14 the answer > is not right n = 15 result is 2004310016. I know it is maybe because of > overflow. So i calclate 2^32, 2^64, 2^128 the result correct and is much > bigger as 14!,Why? 2^n use some big integer or my implementation of n! > is not correct, I'm really confused. > > Someone can help me? > > Thanks > Ting Wang > _______________________________________________ > Haskell mailing list > Haskell@haskell.org > http://www.haskell.org/mailman/listinfo/haskell From Lloyd.Allison at infotech.monash.edu.au Mon Apr 18 00:57:30 2005 From: Lloyd.Allison at infotech.monash.edu.au (Lloyd Allison) Date: Mon Apr 18 00:39:28 2005 Subject: [Haskell] Y in haskell? Message-ID: <200504180457.j3I4vUno007564@nexus.csse.monash.edu.au> Is it possible to define Y in Haskell (pref' H98) -- and get it to pass type checking? -- E.g. As in SML let datatype 'a rt = recrt of ('a rt) -> 'a; fun Y G = let fun Ggg (recrt g) n = G(g (recrt g))n in Ggg (recrt Ggg) end; fun F f n = if n=0 then 1 else n*f(n-1); in Y F 3 end -- I've tried various things, some of which *seem* to put the checker in a loop? -L -- From trevion at gmail.com Mon Apr 18 01:00:54 2005 From: trevion at gmail.com (Trevion) Date: Mon Apr 18 00:42:41 2005 Subject: [Haskell] Y in haskell? In-Reply-To: <200504180457.j3I4vUno007564@nexus.csse.monash.edu.au> References: <200504180457.j3I4vUno007564@nexus.csse.monash.edu.au> Message-ID: <6cf91caa050417220030308056@mail.gmail.com> On 4/18/05, Lloyd Allison wrote: > Is it possible to define Y in Haskell (pref' H98) -- > and get it to pass type checking? I believe that y f = f (y f) is the normal way to do it. .trev From zednenem at psualum.com Mon Apr 18 01:08:45 2005 From: zednenem at psualum.com (David Menendez) Date: Mon Apr 18 00:50:33 2005 Subject: [Haskell] Y in haskell? In-Reply-To: <6cf91caa050417220030308056@mail.gmail.com> Message-ID: Trevion writes: > On 4/18/05, Lloyd Allison wrote: > > Is it possible to define Y in Haskell (pref' H98) -- > > and get it to pass type checking? > > I believe that > > y f = f (y f) > > is the normal way to do it. I've also seen this: y f = g where g = f g -- David Menendez | "In this house, we obey the laws | of thermodynamics!" From bjpop at cs.mu.OZ.AU Mon Apr 18 01:35:36 2005 From: bjpop at cs.mu.OZ.AU (Bernard Pope) Date: Mon Apr 18 01:17:32 2005 Subject: [Haskell] Y in haskell? In-Reply-To: References: Message-ID: <1113802537.3838.6.camel@localhost.localdomain> On Mon, 2005-04-18 at 01:08 -0400, David Menendez wrote: > Trevion writes: > > > On 4/18/05, Lloyd Allison > wrote: > > > Is it possible to define Y in Haskell (pref' H98) -- > > > and get it to pass type checking? > > > > I believe that > > > > y f = f (y f) > > > > is the normal way to do it. > > I've also seen this: > > y f = g > where g = f g Note that the second form generally gives more sharing than the first (I say generally because there is no guarantee in Haskell how much sharing you will get.) At least GHC (and probably hugs and nhc98) gives the second form a cyclic representation. See the discussion in Section 4.1 (Recursion) in "A Natural Semantics for Lazy Evaluation", John Launchbury. Bernie. From bjpop at cs.mu.OZ.AU Mon Apr 18 02:09:08 2005 From: bjpop at cs.mu.OZ.AU (Bernard Pope) Date: Mon Apr 18 01:51:07 2005 Subject: [Haskell] Y in haskell? In-Reply-To: <1113802537.3838.6.camel@localhost.localdomain> References: <1113802537.3838.6.camel@localhost.localdomain> Message-ID: <1113804548.3838.14.camel@localhost.localdomain> On Mon, 2005-04-18 at 15:35 +1000, Bernard Pope wrote: > On Mon, 2005-04-18 at 01:08 -0400, David Menendez wrote: > > Trevion writes: > > > > > On 4/18/05, Lloyd Allison > > wrote: > > > > Is it possible to define Y in Haskell (pref' H98) -- > > > > and get it to pass type checking? > > > > > > I believe that > > > > > > y f = f (y f) > > > > > > is the normal way to do it. > > > > I've also seen this: > > > > y f = g > > where g = f g > > Note that the second form generally gives more sharing than the first > (I say generally because there is no guarantee in Haskell how much > sharing you will get.) At least GHC (and probably hugs and nhc98) gives > the second form a cyclic representation. > > See the discussion in Section 4.1 (Recursion) in "A Natural Semantics > for Lazy Evaluation", John Launchbury. I also meant to add that I think these solutions are not what Lloyd is after, because they rely on recursive equations, which I believe was avoided in Lloyd's SML code. Here is a translation into Haskell: --- data Rt a = Recrt (Rt a -> a) y :: (a -> a) -> a y x = ggg (Recrt ggg) where ggg (Recrt g) = x (g (Recrt g)) func :: (Int -> Int) -> Int -> Int func f n = if n==0 then 1 else n * f (n-1) main :: IO () main = print (y func 3) --- Hugs accepts this, but GHC 6.2 goes into an infinite loop on my machine. I think this is mentioned in the list of known bugs in GHC: http://www.haskell.org/ghc/docs/latest/html/users_guide/bugs.html "GHC's inliner can be persuaded into non-termination using the standard way to encode recursion via a data type" Cheers, Bernie. From waldmann at imn.htwk-leipzig.de Mon Apr 18 11:11:31 2005 From: waldmann at imn.htwk-leipzig.de (Johannes Waldmann) Date: Mon Apr 18 10:53:17 2005 Subject: [Haskell] the wonders of lazy IO Message-ID: <4263CE23.5070300@imn.htwk-leipzig.de> it took me quite a while to isolate the following. what does this program print? certainly "A" (written by the first system call) is different from "B"? import System main = do system "echo A > foo" a <- readFile "foo" system "echo B > foo" b <- readFile "foo" print (a == b) best regards, -- -- Johannes Waldmann -- Tel/Fax (0341) 3076 6479/80 -- ---- http://www.imn.htwk-leipzig.de/~waldmann/ ------- From cgibbard at gmail.com Mon Apr 18 22:11:06 2005 From: cgibbard at gmail.com (Cale Gibbard) Date: Mon Apr 18 21:52:50 2005 Subject: [Haskell] the wonders of lazy IO In-Reply-To: <4263CE23.5070300@imn.htwk-leipzig.de> References: <4263CE23.5070300@imn.htwk-leipzig.de> Message-ID: <89ca3d1f05041819111a674406@mail.gmail.com> The action readFile is a bit unsafe in that it does lazily interleaved IO -- that is, the file is read as you consume the string, and only the part of the string which you use will be read from the file -- if the file is 10G, but you only end up needing the first 100K of it, or only need to consume it a small bit at a time, this is great. On the other hand, if you want a record of the file's contents to be copied into memory before other modifications take place, it doesn't work. What you can do is to force the evaluation of the string before anything else takes place. Defining something like force u = do a <- u return $! a and then replacing readFile "foo" with force (readFile "foo") will result in the program working in the way that you probably expected. Hope this helps, - Cale On 4/18/05, Johannes Waldmann wrote: > it took me quite a while to isolate the following. > > what does this program print? certainly "A" > (written by the first system call) is different from "B"? > > import System > > main = do > system "echo A > foo" > a <- readFile "foo" > system "echo B > foo" > b <- readFile "foo" > print (a == b) > > best regards, > -- > -- Johannes Waldmann -- Tel/Fax (0341) 3076 6479/80 -- > ---- http://www.imn.htwk-leipzig.de/~waldmann/ ------- > > _______________________________________________ > Haskell mailing list > Haskell@haskell.org > http://www.haskell.org/mailman/listinfo/haskell > From heringtonlacey at mindspring.com Tue Apr 19 00:43:13 2005 From: heringtonlacey at mindspring.com (Dean Herington) Date: Tue Apr 19 00:22:07 2005 Subject: [Haskell] the wonders of lazy IO In-Reply-To: <89ca3d1f05041819111a674406@mail.gmail.com> References: <4263CE23.5070300@imn.htwk-leipzig.de> <89ca3d1f05041819111a674406@mail.gmail.com> Message-ID: At 10:11 PM -0400 4/18/05, Cale Gibbard wrote: >The action readFile is a bit unsafe in that it does lazily interleaved >IO -- that is, the file is read as you consume the string, and only >the part of the string which you use will be read from the file -- if >the file is 10G, but you only end up needing the first 100K of it, or >only need to consume it a small bit at a time, this is great. On the >other hand, if you want a record of the file's contents to be copied >into memory before other modifications take place, it doesn't work. > >What you can do is to force the evaluation of the string before >anything else takes place. > >Defining something like >force u = do a <- u > return $! a > >and then replacing readFile "foo" with force (readFile "foo") will >result in the program working in the way that you probably expected. Well, not quite. ($!) (like `seq`, out of which it's built) forces evaluation only to "weak head normal form": essentially enough to determine the top-level constructor. Here, for String, that means only the first character need be evaluated, which in practice means only the first bufferful of the file is read. You need to use ($!!) or something like it to force evaluation of the entire file contents. [See http://www.mail-archive.com/haskell@haskell.org/msg15819.html.] Dean > >Hope this helps, > - Cale > >On 4/18/05, Johannes Waldmann wrote: >> it took me quite a while to isolate the following. >> >> what does this program print? certainly "A" >> (written by the first system call) is different from "B"? >> >> import System >> >> main = do >> system "echo A > foo" >> a <- readFile "foo" >> system "echo B > foo" >> b <- readFile "foo" >> print (a == b) >> >> best regards, >> -- >> -- Johannes Waldmann -- Tel/Fax (0341) 3076 6479/80 -- >> ---- http://www.imn.htwk-leipzig.de/~waldmann/ ------- >> >> _______________________________________________ >> Haskell mailing list >> Haskell@haskell.org >> http://www.haskell.org/mailman/listinfo/haskell >> >_______________________________________________ >Haskell mailing list >Haskell@haskell.org >http://www.haskell.org/mailman/listinfo/haskell From cgibbard at gmail.com Tue Apr 19 01:19:52 2005 From: cgibbard at gmail.com (Cale Gibbard) Date: Tue Apr 19 01:01:35 2005 Subject: [Haskell] the wonders of lazy IO In-Reply-To: References: <4263CE23.5070300@imn.htwk-leipzig.de> <89ca3d1f05041819111a674406@mail.gmail.com> Message-ID: <89ca3d1f05041822191e1d91ae@mail.gmail.com> > Well, not quite. ($!) (like `seq`, out of which it's built) forces > evaluation only to "weak head normal form": essentially enough to > determine the top-level constructor. Here, for String, that means > only the first character need be evaluated, which in practice means > only the first bufferful of the file is read. You need to use ($!!) > or something like it to force evaluation of the entire file contents. > [See http://www.mail-archive.com/haskell@haskell.org/msg15819.html.] > > Dean > Ah, good point, I missed that. From waldmann at imn.htwk-leipzig.de Tue Apr 19 01:29:45 2005 From: waldmann at imn.htwk-leipzig.de (Johannes Waldmann) Date: Tue Apr 19 01:11:36 2005 Subject: [Haskell] the wonders of lazy IO In-Reply-To: <89ca3d1f05041822191e1d91ae@mail.gmail.com> References: <4263CE23.5070300@imn.htwk-leipzig.de> <89ca3d1f05041819111a674406@mail.gmail.com> <89ca3d1f05041822191e1d91ae@mail.gmail.com> Message-ID: <42649749.1040705@imn.htwk-leipzig.de> Thanks for the comments. Indeed I knew the solution - once I isolated the problem. Note that ghc(i) behaves differently when running main2 below (it says "file is locked"). (hugs does not complain.) import System main1 = do system "echo A > foo" a <- readFile "foo" system "echo B > foo" b <- readFile "foo" print (a == b) main2 = do writeFile "foo" "A" a <- readFile "foo" writeFile "foo" "B" b <- readFile "foo" print (a == b) -- -- Johannes Waldmann -- Tel/Fax (0341) 3076 6479/80 -- ---- http://www.imn.htwk-leipzig.de/~waldmann/ ------- From john at repetae.net Tue Apr 19 07:54:42 2005 From: john at repetae.net (John Meacham) Date: Tue Apr 19 08:04:44 2005 Subject: [Haskell] ANNOUNCE: The jhc Haskell compiler. Message-ID: <20050419115442.GJ8142@momenergy.repetae.net> See what I've been doing :) This document as html is available at http://repetae.net/john/computer/jhc/jhc.html and the main jhc page with links to the darcs repo is at http://repetae.net/john/computer/jhc/ = Jhc = Jhc is a compiler for Haskell that aims to produce very efficient code as well as explore novel compilation techniques in an attempt to make them practical. One thing jhc does not aim to be is a toy or proof-of-concept compiler. A lot of the techniques have already had proof-of-concept implementations and jhc aims to determine how to bring them to a full-scale Haskell compiler. (or die trying) Although jhc is not ready for general use, I think some of its ideas or code might be useful to other people so I am deciding to release it in this state. == Jhc Bullet Points == * Full support for Haskell 98, The FFI and some extensions. (modulo some bugs being worked on and some libraries that need to be filled out) * Produces 100% portable ISO C. The same C file can compile on machines of different byte order or bit-width without trouble. * No pre-written runtime. other than 20 lines of boilerplate all code is generated from the Grin intermediate code and subject to all code simplifying and dead code elimination transformations. As a result, jhc currently produces the smallest binaries of any Haskell compiler. (main = putStrLn "Hello, World!" compiles to 6,568 bytes vs 177,120 bytes for GHC 6.4) * No garbage collector. A variant of Region Inference is in the works. * Compilation by transformation with 2 general intermediate languages. * First Intermediate language based on Henk, Pure Type Systems and the Lambda cube. This is similar enough to GHCs core that many optimizations may be implemented in the same way. * Second Intermediate language is based on Boquist's graph reduction language. This allows all unknown jumps to be compiled out leaving standard case statements and function calls as the only form of flow control. Combined with jhc's use of region inference, this means jhc can compile to most any standard imperative architecture/language/virtual machine directly without special support for a stack or tail-calls. * Novel type class implementation not based on dictionary passing with many attractive properties. This implementation is possible due to the whole-program analysis phase and the use of the lambda-cube rather than System F as the base for the functional intermediate language. * Intermediate language and back-end suitable for directly compiling any language that can be embedded in the full lambda cube, making things like a compiler for cayenne much more direct. There is no type erasure phase, types are erased for the simple reason that values do not depend on them via the standard dead-code elimination pass. * A very modern design, it using rank-n polymorphism, monad transformers, generic programing, and existential types to make the code very concise and clear and improve code reuseability. (since jhc was written in pieces over 5 years, some at times when I just started using Haskell, the code quality actually varies a lot across the whole project) * All indirect jumps are transformed away, jhc's final code is very similar to hand-written imperitive code, using only branches and static function calls. A simple basic-blocks analysis is enough to transform tail-calls into loops. * Full transparent support for mutually recursive modules. == More in depth == === Type Classes === One of the most novel things about jhc is its implementation of type classes which differs significantly from the standard dictionary passing approach used by other Haskell compilers. Jhc's unique approach is made possible by 2 other design choices, the use of a pure type system with no distinction between types and values and its use of whole-program analysis. The basic idea is that instead of passing a dictionary, a case statement directly scrutinizes the type parameter of a function and calls the appropriate overloaded routine directly. This has a number of interesting properties * The number of extra hidden parameters is the number of free type variables in a functions signature rather than the number of class constraints. So (Ord a, Show a, Num a) => a -> a will only pass a single extra parameter for the type of a rather than 3 dictionaries. * 2 indirections, first one to look up the dictionary, then one to call the function pointed to in the dictionary are replaced by a single case of an algebraic data type and calls to statically known functions. This is exactly the transformation that the GRIN points-to analysis does, but much sooner and with much better optimization potential. Calls to statically known functions are MUCH more efficient. * Standard case coalescing optimizations have a dramatically enhanced effect when dealing with overloaded functions. imagine the code snipped (x*(y + z)/z) :: a . Each of the calls to the polymorphic functions *, +, and / will expand to a case statement on 'a', since all case statements are trivially examining the same value, they are coalesced into a single one. With dictionary passing, we would have to look up the appropriate entry in the Num hidden parameter, the Floating hidden parameter, then look up each of *, +, and / individually. Under jhc's scheme all of that is statically transformed into a single case on a normal algebraic type. This optimization is a HUGE win. Jhc's ability to do this comes from the fact that it is statically evident from that case statement that the type fully determines every polymorphic function on that type, a property that is lost in the dictionary passing approach since as far as the compiler is concerned, arbitrary functions may be being passed in the dictionaries, it does not know that they come in specific correlated sets. * Functional Dependencies actually lead to run-time savings. each functional dependency transforms into a case statement which may be omitted. * Although a whole-world analysis is needed to generate full versions of type class methods, this is actually rarely needed in practice, as it is often the case the compiler is able to statically prove only a certain subset of types are needed at any given point and is able to generate specialized versions on the spot. This is implemented in a manner very similar to GHC's rules. * Advanced compile-time and run-time specializations are possible via pragmas. (see below) === E === E is a pure type system based on Henk and the lambda-cube. An important property of E is that there is no distinction between types and values, this is important for jhc's implementation of type classes. === Grin === Grin is basically a first-order monadic functional language. It is very similar to the Graph Reduction Intermediate Language as defined by Boquist but has a few notable changes. * It is typed. * It has multiple return values as a primitive (unboxed tuples) * My target is higher level C or C-- rather than RISC code, so some transformations are less important as the C compiler can be assumed to take care of them. * The terminology and syntax borrows from Haskell's current implementation of monads and 'do' notation. Most of the transformations mentioned in Boquist's thesis have been implemented, however certain intermediate states in Boquist's scheme are actually invalid in the strongly typed Grin of jhc so need to be combined or modified. A whole lot can be learned from the Grin data type and Grin is fully defined by the following infixr 1 :->, :>>= data Lam = Val :-> Exp deriving(Eq,Ord,Show) data Exp = Exp :>>= !Lam | App Atom [Val] -- ^ this handles applications of functions and built-ins | Prim Primitive [Val] | Case Val [Lam] | Return { expValue :: Val } | Store { expValue :: Val } | Fetch { expAddress :: Val } | Update { expAddress :: Val, expValue :: Val } | Error String Ty -- ^ abort with an error message, non recoverably. | Cast Val Ty -- ^ reinterpret Val as a different type, also used to box\/unbox lifted types deriving(Eq,Show,Ord) data Val = NodeC !Tag [Val] | NodeV !Var [Val] | Tag !Tag | Const Val -- ^ pointer to constant data, only Lit, Tag, and NodeC may be children | Lit !Number Ty | Var !Var Ty | Tup [Val] | ValPrim APrim deriving(Eq,Show,Ord) data Ty = TyTag -- ^ a lone tag | TyPtr Ty -- ^ pointer to a heap location which contains its argument | TyNode -- ^ a whole tagged node | Ty Atom -- ^ a basic type | TyTup [Ty] -- ^ unboxed list of values | TyUnknown -- ^ an unknown possibly undefined type, All of these must be eliminated by code generation deriving(Eq,Ord) === Extensions === Jhc implements several extensions to Haskell 98 ==== Standard Extensions ==== * The FFI is almost fully supported except for calling Haskell code from C. * Hierarchical module names are supported as described in the addendum. The search algorithm is somewhat different than GHC though, Control.Monad.Identity will be searched for as Control/Monad/Identity.hs, Control/Monad.Identity.hs and Control.Monad.Identity.hs, giving you a bit more freedom in laying out your directory structure. * Empty data declarations with no constructors are supported * Liberalized type synonyms are supported (type synonyms may appear anywhere a type may appear) * INLINE, SPECIALIZE pragmas * unsafePerformIO, unsafeInterleaveIO are provided. ==== New Extensions ==== * Magic underscore. Using underscore in an expression expands to bottom with an error message giving the current file and line number. This is useful because it is common practice nowadays to use undefined as a witness for a type. Relatively easy errors to make using this scheme lead to an unhelpful "error: Prelude.undefined" with no indication of where the error actually is. By using the alternate (_ :: Int) rather than (undefined :: Int) you will get an informative run-time error message as well as save some space. The magic underscore is also useful as a placeholder for code you mean to fill in later. * foreign primitive, all primitives are brought into scope with a foreign primitive declaration (barring a few numeric operators) , these can also be used to gain access to C constants, obviating much of the need for a preprocessor such as hsc2hs and allowing portable C code to be generated by jhc. * ERROR_ANNOTATE pragma. This is a generalization of GHCs assert magic. A function which is given an ERROR_ANNOTATE pragma will be replaced with an alternate version that takes the functions use site as an argument. This allows error messages to be in terms of where said function was used. The alternate function is named [function]_err_ann__ and must be in the same module as the original function. Jhc does no checking to ensure both functions have the same effect, it is up to the user to ensure that. An example is

  head :: [a] -> a
  head (x:xs) = x
  head [] = error "head - empty list"

  {-# ERROR_ANNOTATE head #-}
  
  head_err_ann__ :: String -> [a] -> a
  head_err_ann__ pos (x:xs) = x
  head_err_ann__ pos [] = error $ pos ++ ": head - empty list"

  -- Now, a call to head on an empty list will produce an error message like
  -- "Main.hs:23: head - empty list"

* SUPERSPECIALIZE pragma. This pragma has the same affect as the SPECIALIZE pragma, but in addition to doing compile-time specialization, SUPERSPECIALIZE performs run-time specialization. A superspecialized function will perform a single check against the type it is called with and depending on the single test, call a specialized version of the function. This can be a huge win when working with overloaded numeric types, imagine a matrix-multiply routine, if the type cannot be determined at compile-time then we would normally be forced to fall back to generic version which may have hundreds of additions and multiplications, each of which must test what type its argument are. If we SUPERSPECIALIZE the multiply routine instead, a single run-time test will be performed and the much much more efficient specialized routine will be used, even if it could not be proven at compile time. * MULTISPECIALIZE pragma. This is equivalent to calling SPECIALIZE against every possible type. It's main cost is compile time and memory usage. It should be used only sparingly as it can lead to quadratic rule explosion in the total number of types in the transitive closure of all imported modules in the worst case. * MULTISUPERSPECIALIZE pragma. This is equivalent to calling SUPERSPECIALIZE against every possible type. If not careful, this can result in massive code bloat but might be a big win in certain cases. == The story of jhc == When I first started to learn Haskell in 1999, I decided I needed a project. Haskell was my first (modern) functional language and I was seduced by its robust strong type system and efficiency gains. After writing a toy ray-tracer (my usual first project in a new language) it was clear I needed to try something somewhat more challenging and jhc was born. My reasoning was simple, by writing a Haskell compiler in Haskell I will double my language learning speed since I will not only have to learn how to program in it by forcing myself to complete a non-trivial project, but also its subtle semantics and dark corners since I actually needed to implement it correctly. Writing a compiler is also doubly efficient to begin with, since if you self-compile improvements not only give you a better optimizer, but also speed up your self-compiled compiler. All in all I figure I was making very good use of my time. For some reason, when I explain my reasoning to other people they look at me like I am crazy, but I can detect no flaw in my logic. In any case, I worked on jhc on and off for a while, the project got boosts a few times, such as when hatchet was released and I used it to replace my front end. Recently, with my purchase of a faster machine actually beefy enough to run jhc and the realization I was getting good optimizations from my implementation of type classes combined with the small binary size of produced files I decided to make a push for jhc to become a usable compiler. == All is not well in jhc-land == There are still substantial issues which need to be overcome before jhc can be used for general Haskell programing * It doesn't scale. Basically since jhc compiles the entire standard library along with your code, even moderately complex programs can be beyond its grasp * It takes ridiculous amounts of memory and CPU. A gigabyte of RAM usage is not unheard of. * There are still some major bugs * It leaks memory. The Region inference algorithm is still in the tweaking stage and programs are known to leak memory. for short running programs, this does not seem to be an issue, but anything expected to perform a lot of reductions will probably run out of heap. * it is not done * Arrays are very slow at the moment. * only about 70% of nofib compiles at the moment. * That said, I am releasing it because people might find the ideas interesting or be able to learn from or borrow of the code. * Horrible error messages. A few programmer errors (and some non-errors) cause the compiler to quit with an 'error' or pattern match failure. == References == * Boquist Thesis * Henk paper * Pure Type Systems type checking paper * CPR analysis. * Strictness analysis w/ HORN clauses * Typing Haskell in Haskell * Hatchet -- John Meacham - ?repetae.net?john? From afie at cs.uu.nl Tue Apr 19 09:20:45 2005 From: afie at cs.uu.nl (Arjan van IJzendoorn) Date: Tue Apr 19 09:02:26 2005 Subject: [Haskell] readline troubles Message-ID: <426505AD.90006@cs.uu.nl> Hello all, Using GHCi 6.2.2 and HaXml-1.12 gives you the output below on Windows with Cygwin. I've seen this message on several other occasions and I finally managed to fix this using info at: http://www.haskell.org/pipermail/glasgow-haskell-users/2004-November/007370.html (thank you, Sigbjorn!) However, this is no trivial job and everyone who wants to compile a project using readline on Windows needs to patch this. My question is: has this been solved in GHC 6.4 and if not, can this easily be solved? Maybe by including some version of readline in the Windows GHC installation? Cheers, Arjan van IJzendoorn ----------------------- GHCi output [...header...] Loading package base ... linking ... done. Loading package lang ... linking ... done. Loading package haskell98 ... linking ... done. Loading package concurrent ... linking ... done. Loading package QuickCheck ... linking ... done. Loading package readline ... linking ... c:/apps/ghc/HSreadline.o: unknown symbol `_rl_redisplay_function' ghc.exe: unable to load package `readline' From ketil+haskell at ii.uib.no Wed Apr 20 05:21:11 2005 From: ketil+haskell at ii.uib.no (Ketil Malde) Date: Wed Apr 20 05:04:12 2005 Subject: [Haskell] profiling and GHC6.4 Message-ID: <871x95yfaw.fsf@sefirot.ii.uib.no> Hi, I have some problems getting profiling to work with a ghc-6.4 that I compiled from source. Everything seems to work all right, but the output doesn't contain any times; in time profiling (+RTS -p) times are all zeros, with heap profiling, I never get any 'samples' output, just an empty one. I can go back to see if there's anything I configured incorrectly, but this sounds weird enough that I thought I'd ask the list if this is a known problem (preferably with a known solution). Is it? (ghc 6.4 compiled from source with ghc 6.2.2 on Ubuntu 5.04, Linux 2.6.12-rc2) -kzm -- If I haven't seen further, it is by standing in the footprints of giants From simonmar at microsoft.com Wed Apr 20 05:58:58 2005 From: simonmar at microsoft.com (Simon Marlow) Date: Wed Apr 20 05:40:38 2005 Subject: [Haskell] the wonders of lazy IO Message-ID: <3429668D0E777A499EE74A7952C382D1037DC9CB@EUR-MSG-01.europe.corp.microsoft.com> On 19 April 2005 06:30, Johannes Waldmann wrote: > Thanks for the comments. Indeed I knew the solution - > once I isolated the problem. > > Note that ghc(i) behaves differently when running main2 below > (it says "file is locked"). (hugs does not complain.) > > import System > > main1 = do > system "echo A > foo" > a <- readFile "foo" > system "echo B > foo" > b <- readFile "foo" > print (a == b) > > main2 = do > writeFile "foo" "A" > a <- readFile "foo" > writeFile "foo" "B" > b <- readFile "foo" > print (a == b) GHC is correct to complain about main2, FWIW. The Haskell report specifies single-writer/multiple-reader locking on files. Cheers, Simon From a_regidor at yahoo.es Wed Apr 20 19:26:29 2005 From: a_regidor at yahoo.es (=?iso-8859-1?q?Antonio=20Regidor=20Garc=EDa?=) Date: Wed Apr 20 19:08:07 2005 Subject: [Haskell] Re: ANNOUNCE: The jhc Haskell compiler. In-Reply-To: <20050420090422.0A0C0368257@www.haskell.org> Message-ID: <20050420232629.253.qmail@web26203.mail.ukl.yahoo.com> Very interesting! What license uses jhc? The COPYING file seems to be empty. Best regards, Antonio Regidor Garc?a ______________________________________________ Renovamos el Correo Yahoo!: ?250 MB GRATIS! Nuevos servicios, m?s seguridad http://correo.yahoo.es From john at repetae.net Wed Apr 20 19:58:39 2005 From: john at repetae.net (John Meacham) Date: Wed Apr 20 19:40:22 2005 Subject: [Haskell] Re: ANNOUNCE: The jhc Haskell compiler. In-Reply-To: <20050420232629.253.qmail@web26203.mail.ukl.yahoo.com> References: <20050420090422.0A0C0368257@www.haskell.org> <20050420232629.253.qmail@web26203.mail.ukl.yahoo.com> Message-ID: <20050420235839.GL8142@momenergy.repetae.net> On Thu, Apr 21, 2005 at 01:26:29AM +0200, Antonio Regidor Garc?a wrote: > Very interesting! What license uses jhc? The COPYING file seems to be empty. It is under the GPL. For some reason the darcs.cgi browser isn't displaying it, but if you look in the repo directly it is there. Some parts are under different licences, lots of the FrontEnd is under the various hatchet licences and is documented in README.FrontEnd and the source files themselves. Although, I might have forgot to put in a note, I meant for the lib/ to be placed under a licence equivalent to the fptools libraries, most of it is derived from them anyway. There are only so many ways to define 'head' :) John -- John Meacham - ?repetae.net?john? From alethenorio at home.se Wed Apr 20 22:04:32 2005 From: alethenorio at home.se (Alexandre Weffort Thenorio) Date: Wed Apr 20 21:41:02 2005 Subject: [Haskell] Going nuts Message-ID: <002e01c54616$89144900$5a45b652@alethenorio> As usual a beginner in Haskell. Trying to write a simple program in haskel shown below main :: IO() main =catch (do hexFile <- readFile "file" putStr "What is the key number (0 or 1)?\n" keyno <- getLine putStr "Input key.\n" key <- getLine newLine <- outputLine keyno key (lines(hexFile)) bla bla bla........ getLeft :: String -> String -> String getLeft _ [] = "" getLeft key line |key == "0" = take 9 line |otherwise = take 25 line getRight :: String ->String -> String getRight _ [] = "" getRight key line |key == "0" = drop 25 line |otherwise = drop 41 line outputLine keyno key orgFile = do part1 <- getLeft keyno orgFile part2 <- getRight keyno orgFile total <- part1 ++ (strUpper key) ++ part2 ++ "\n" newHexFile <- openFileEx "newfile" (BinaryMode WriteMode) hPutStrLn newHexFile (orgFile!!0 ++ "\n" ++ total ++ unlines (drop 2 orgFile)) strUpper :: String -> String strUpper [] = "" --strUpper x:xs = (toUpper x):(strUpper xs) And I keep getting the error changecode.hs:42: Couldn't match `[a]' against `Char' Expected type: [a] Inferred type: Char In the first argument of `(++)', namely `part1' In a 'do' expression: total <- part1 ++ ((strUpper key) ++ (part2 ++ "\n")) I have tried thousands and thousand of modifications (Originally getLeft and getRight didn't exist, the code was part of outputLine) but it keeps thinking that orgFile is a String when clearlly it is a [String]. Also I can get my function strUpper (Which simply puts strings to Upper case) to work. Can anybody see what is wrong here? Best Regards Alex From chrisk at MIT.EDU Wed Apr 20 23:32:48 2005 From: chrisk at MIT.EDU (ChrisK) Date: Wed Apr 20 23:14:40 2005 Subject: [Haskell] Going nuts In-Reply-To: <002e01c54616$89144900$5a45b652@alethenorio> References: <002e01c54616$89144900$5a45b652@alethenorio> Message-ID: <9ede1e13bf989876a8d4c8a9f6e36131@mit.edu> On Apr 20, 2005, at 10:04 PM, Alexandre Weffort Thenorio wrote: > As usual a beginner in Haskell. Trying to write a simple program in > haskel > shown below > > outputLine keyno key orgFile = do > part1 <- getLeft keyno orgFile > part2 <- getRight keyno orgFile > total <- part1 ++ (strUpper key) ++ part2 ++ "\n" This is just creating a new expression bound to total, not an action. Instead of <- use let = let total = part1 ++ (strUpper key) ++ part2 ++ "\n" Something about Lists [] also being a Monad gave a confusing error message to you > newHexFile <- openFileEx "newfile" (BinaryMode WriteMode) > hPutStrLn newHexFile (orgFile!!0 ++ "\n" ++ total ++ unlines > (drop 2 > orgFile)) > > strUpper :: String -> String > strUpper [] = "" > --strUpper x:xs = (toUpper x):(strUpper xs) > > > And I keep getting the error > > changecode.hs:42: > Couldn't match `[a]' against `Char' > Expected type: [a] > Inferred type: Char > In the first argument of `(++)', namely `part1' > In a 'do' expression: > total <- part1 ++ ((strUpper key) ++ (part2 ++ "\n")) > > I have tried thousands and thousand of modifications (Originally > getLeft and > getRight didn't exist, the code was part of outputLine) but it keeps > thinking that orgFile is a String when clearlly it is a [String]. Also > I can > get my function strUpper (Which simply puts strings to Upper case) to > work. > > Can anybody see what is wrong here? > > Best Regards > > Alex > > _______________________________________________ > Haskell mailing list > Haskell@haskell.org > http://www.haskell.org/mailman/listinfo/haskell From chrisk at MIT.EDU Wed Apr 20 23:42:21 2005 From: chrisk at MIT.EDU (ChrisK) Date: Wed Apr 20 23:24:06 2005 Subject: [Haskell] Variable arity function (VarArg) Message-ID: And while I'm posting to the list, I'll send something I wish I had found earlier. I had wanted to write show several things, and writing show 10 times was not clever. And so I initially created an infix operator to put between everything to do the showing, which was not much better. But this http://okmij.org/ftp/Haskell/types.html#polyvar-fn was the clever technique. {-# OPTIONS -fglasgow-exts #-} -- Techinque from http://okmij.org/ftp/Haskell/types.html#polyvar-fn -- canShowList and ssum will take a variable number of arguments data CanShow where { CanShow :: Show a => a -> CanShow ; CSLit::String->CanShow} instance Show CanShow where show (CanShow a) = show a show (CSLit s) = s -- The initial type is accumulator, here a simple list class (Show a) => ShowList a r where canShowList :: [CanShow] -> a -> r -- After accumulating last argument, you can apply a function, e.g. reverse instance (Show b) => ShowList b [CanShow] where canShowList l x = reverse $ (CanShow x):l -- Get next argument instance (Show a,ShowList b r) => ShowList a (b->r) where canShowList l x = canShowList ((CanShow x):l) -- Could eat initial fully typed arguments and make tuple with [] sL :: (ShowList a r) => a -> r sL = canShowList [] pio :: [CanShow]->IO() pio = putStr . unlines . (map show) eatFirstClass :: (forall a r.(ShowList a r)=>(a->r))->[CanShow] eatFirstClass s = s "and more" -- Using the same technique to do more work -- This example needs the "r->a" FunDep to work: class (Num a)=>ScaledSum a r | r->a where ssum' :: (a,a) -> a -> r instance ScaledSum Double Double where ssum' (s,t) x = (s*(t+x)) -- As an added bonus we get "context sensativity" instance ScaledSum Double Int where ssum' (s,t) x = floor (s*(t+x)) instance (ScaledSum a p) => ScaledSum a (a->p) where ssum' (s,t) x = ssum' (s,t+x) ssum a x = ssum' (a,0) x -- This fails since ::[Int] applies to (print $ build 1 2 3) --main = print $ build 1 2 3 ::[Int] -- Use parenthesis to control ::[Int] syntax main = do let empty :: [String] empty = [] full = [1,2,3] efc = eatFirstClass (sL empty full) eol = CSLit "\n" ssI = (ssum 12) 1 (1/2) (-3.5) :: Int ssD = (ssum 12) 1 (1/2) (-3.5) :: Double pio (sL "Hi!" (17,'a') eol (1,CSLit ['a']) empty (CSLit "ping\n") full efc ("ssum",ssI,ssD) "Bye!") let other = sL "Terminate with ::[CanShow]" full 1 eol 2 eol 3 ::[CanShow] putStrLn $ show other === GHCI === *Main> main "Hi!" (17,'a') (1,a) [] ping [1,2,3] [[],[1,2,3],"and more"] ("ssum",-24,-24.0) "Bye!" ["Terminate with ::[CanShow]",[1,2,3],1, ,2, ,3] From ketil+haskell at ii.uib.no Thu Apr 21 03:29:23 2005 From: ketil+haskell at ii.uib.no (Ketil Malde) Date: Thu Apr 21 03:12:27 2005 Subject: [Haskell] profiling and GHC6.4 In-Reply-To: <871x95yfaw.fsf@sefirot.ii.uib.no> (Ketil Malde's message of "Wed, 20 Apr 2005 11:21:11 +0200") References: <871x95yfaw.fsf@sefirot.ii.uib.no> Message-ID: <87ll7cbnak.fsf@sefirot.ii.uib.no> Ketil Malde writes: > I have some problems getting profiling to work with a ghc-6.4 that I > compiled from source. Everything seems to work all right, but the > output doesn't contain any times [...] > (ghc 6.4 compiled from source with ghc 6.2.2 on Ubuntu 5.04, Linux > 2.6.12-rc2) I tried with a stock kernel, and now it works. I've probably forgot to include some feature that GHC uses for tracking times (RTC?) when I compiled the kernel. Would be nice if GHC told me about the missing feature, it's not a big deal. -kzm -- If I haven't seen further, it is by standing in the footprints of giants From michael.walter at gmail.com Wed Apr 20 22:08:36 2005 From: michael.walter at gmail.com (Michael Walter) Date: Thu Apr 21 06:08:55 2005 Subject: [Haskell] Going nuts In-Reply-To: <002e01c54616$89144900$5a45b652@alethenorio> References: <002e01c54616$89144900$5a45b652@alethenorio> Message-ID: <877e9a17050420190841386fa8@mail.gmail.com> ... = do let part1 = getLeft keyno orgFile let part2 = getRight keyno orgFile let total = part1 ++ (strUpper key) ++ part2 ++ "\n" ... <- ... getLeft/getRight do not return monadic actions (String -> String -> String, not String -> String -> IO String), so you just bind them using "let" Regards, Michael From pediddle at pediddle.net Wed Apr 20 22:51:30 2005 From: pediddle at pediddle.net (Peter Davis) Date: Thu Apr 21 06:08:57 2005 Subject: [Haskell] Re: Going nuts References: <002e01c54616$89144900$5a45b652@alethenorio> Message-ID: On 2005-04-20 19:04:32 -0700, "Alexandre Weffort Thenorio" said: > As usual a beginner in Haskell. Trying to write a simple program in haskel > shown below > > [snip] > getLeft :: String -> String -> String > getRight :: String ->String -> String > > outputLine keyno key orgFile = do > part1 <- getLeft keyno orgFile > part2 <- getRight keyno orgFile > total <- part1 ++ (strUpper key) ++ part2 ++ "\n" > > [snip] > And I keep getting the error > > changecode.hs:42: > Couldn't match `[a]' against `Char' > Expected type: [a] > Inferred type: Char > In the first argument of `(++)', namely `part1' > In a 'do' expression: > total <- part1 ++ ((strUpper key) ++ (part2 ++ "\n")) You should be using: let part1 = getLeft keyno orgFile let part2 = getRight keyno orgFile let total = part1 ++ (strUpper key) ++ part2 ++ "\n" The problem is that the "part1 <- ..." syntax is for extracting the result from a monadic computation. When you read from a file like "hexFile <- readFile "file"", readFile is a computation in the IO monad, and you extract hexFile from the monad. The list [] type is also a monad, and String is really [Char], so "part1 <- getLeft keyno orgFile" implies that part1 is of type Char, which is a single element extracted from the list of Chars returned by the monadic computation (in the [] monad) "getLeft keyno orgFile". That leads to the error you see. part1's inferred type is Char, and the ++ function expects a list of some type ([a]), which Char is obviously not. The "let" syntax binds a variable instead of extracting it from a monadic computation, which is what you want for these three lines. Hope that helps! -- Peter Davis "Furthermore, I believe bacon prevents hair loss!" From e.jordan at student.unsw.edu.au Thu Apr 21 05:00:43 2005 From: e.jordan at student.unsw.edu.au (Eli Jordan) Date: Thu Apr 21 06:08:57 2005 Subject: [Haskell] compiling under osx Message-ID: <4a9acbef3d79e5b7b0697393ecc87564@student.unsw.edu.au> hi im a first year computer science student, and we are currently learning haskell. We have recently begun to learn the IO functions and to compile programs. The problem i have is that when i execute the command ghc -o .hs it is supposed to produce two files, when i do it is not produced. i am running under osx 10.3.9, and do not understand why this is happening, any help would be greatly appreciated. cheers Eli Jordan From slucas at dsic.upv.es Thu Apr 21 09:20:22 2005 From: slucas at dsic.upv.es (slucas@dsic.upv.es) Date: Thu Apr 21 09:02:02 2005 Subject: [Haskell] compiling under osx In-Reply-To: <4a9acbef3d79e5b7b0697393ecc87564@student.unsw.edu.au> References: <4a9acbef3d79e5b7b0697393ecc87564@student.unsw.edu.au> Message-ID: <1114089622.4267a8964e5be@webmail.dsic.upv.es> Mensaje citado por Eli Jordan : > hi > > im a first year computer science student, and we are currently learning > haskell. We have recently begun to learn the IO functions and to > compile programs. > > The problem i have is that when i execute the command ghc -o > .hs it is supposed to produce two files, when i do it > is not produced. > > i am running under osx 10.3.9, and do not understand why this is > happening, any help would be greatly appreciated. Probably you have to type 'open ' Best regards, Salvador. ---------------------------------------------------------------- This message was sent using IMP, the Internet Messaging Program. From alethenorio at home.se Thu Apr 21 11:42:10 2005 From: alethenorio at home.se (Alexandre Weffort Thenorio) Date: Thu Apr 21 11:18:04 2005 Subject: [Haskell] Re: Going nuts References: <002e01c54616$89144900$5a45b652@alethenorio> Message-ID: <002901c54688$afe2f370$5a45b652@alethenorio> Mostly appreciated. It sure fixed the problem. Now for another question in outputline outputLine keyno key orgFile = do --lineList <- getLines orgFile --orgLine <- head (drop 1 lineList) let part1 = getLeft keyno (orgFile!!1) let part2 = getRight keyno (orgFile!!1) let total = part1 ++ (map toUpper key) ++ part2 ++ "\n" newHexFile <- openFileEx "newint.hex" (BinaryMode WriteMode) hPutStrLn newHexFile (orgFile!!0 ++ "\n" ++ total ++ unlines (drop 2 orgFile)) How can I check whether keyno is either 1 or 0 and give an error that will quit the program (or return to main and from there jump to catch) and if key length is 16 returning error otherwise? I mean probably a catch will do but I don't how to differentiate between the errors and how to force the error. Best Regards Alex ----- Original Message ----- From: "Peter Davis" To: Sent: Thursday, April 21, 2005 4:51 AM Subject: [Haskell] Re: Going nuts On 2005-04-20 19:04:32 -0700, "Alexandre Weffort Thenorio" said: > As usual a beginner in Haskell. Trying to write a simple program in haskel > shown below > > [snip] > getLeft :: String -> String -> String > getRight :: String ->String -> String > > outputLine keyno key orgFile = do > part1 <- getLeft keyno orgFile > part2 <- getRight keyno orgFile > total <- part1 ++ (strUpper key) ++ part2 ++ "\n" > > [snip] > And I keep getting the error > > changecode.hs:42: > Couldn't match `[a]' against `Char' > Expected type: [a] > Inferred type: Char > In the first argument of `(++)', namely `part1' > In a 'do' expression: > total <- part1 ++ ((strUpper key) ++ (part2 ++ "\n")) You should be using: let part1 = getLeft keyno orgFile let part2 = getRight keyno orgFile let total = part1 ++ (strUpper key) ++ part2 ++ "\n" The problem is that the "part1 <- ..." syntax is for extracting the result from a monadic computation. When you read from a file like "hexFile <- readFile "file"", readFile is a computation in the IO monad, and you extract hexFile from the monad. The list [] type is also a monad, and String is really [Char], so "part1 <- getLeft keyno orgFile" implies that part1 is of type Char, which is a single element extracted from the list of Chars returned by the monadic computation (in the [] monad) "getLeft keyno orgFile". That leads to the error you see. part1's inferred type is Char, and the ++ function expects a list of some type ([a]), which Char is obviously not. The "let" syntax binds a variable instead of extracting it from a monadic computation, which is what you want for these three lines. Hope that helps! -- Peter Davis "Furthermore, I believe bacon prevents hair loss!" _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell From waldmann at imn.htwk-leipzig.de Thu Apr 21 13:21:03 2005 From: waldmann at imn.htwk-leipzig.de (Johannes Waldmann) Date: Thu Apr 21 13:02:55 2005 Subject: [Haskell] haddock -cpp ? Cabal support for haddock ? Message-ID: <4267E0FF.5050107@imn.htwk-leipzig.de> What is the preferred way to generate haddockumentation from code that must be preprocessed (ghc -cpp)? Would Cabal support this? I'd certainly welcome Cabal support for other haddock features as well (--source, --read-interface). I am not sure where to put all these arguments in the .cabal file. And ... could we have something in haddock like JavaDoc's "@since" tag? -- -- Johannes Waldmann -- Tel/Fax (0341) 3076 6479/80 -- ---- http://www.imn.htwk-leipzig.de/~waldmann/ ------- From benjamin.franksen at bessy.de Thu Apr 21 20:31:57 2005 From: benjamin.franksen at bessy.de (Benjamin Franksen) Date: Thu Apr 21 19:55:21 2005 Subject: [Haskell] cabal feature request Message-ID: <200504220231.58073.benjamin.franksen@bessy.de> I finally succeeded using cabal for a project that uses hsc2hs. My problem was/is I need to give special options to hsc2hs, for instance a different template header file to use. Cabal doesn't support this at the moment. I propose to give the user a bit more flexibility with regard to preprocessors, i.e. add some more tags to the .cabal file, like hsc2hs-options, cpp-options, ... I made the necessary changes for hsc2hs-options in a few minutes (thanks to the nicely structured cabal libraries :). Another question: Is there a proposal how to (better) support test executables for a library package? (I remember that this topic has been discussed but can't remember any conclusion). Cheers Ben From ijones at syntaxpolice.org Fri Apr 22 03:12:26 2005 From: ijones at syntaxpolice.org (Isaac Jones) Date: Fri Apr 22 02:54:03 2005 Subject: [Haskell] haddock -cpp ? Cabal support for haddock ? In-Reply-To: <4267E0FF.5050107@imn.htwk-leipzig.de> (Johannes Waldmann's message of "Thu, 21 Apr 2005 19:21:03 +0200") References: <4267E0FF.5050107@imn.htwk-leipzig.de> Message-ID: <87pswn9tet.fsf@syntaxpolice.org> Johannes Waldmann writes: > What is the preferred way to generate haddockumentation > from code that must be preprocessed (ghc -cpp)? > > Would Cabal support this? Cabal does support this. If you use the CPP extension, it'll preprocess the code before running haddock on it. > I'd certainly welcome Cabal support for other haddock features as > well (--source, --read-interface). I am not sure where to put all > these arguments in the .cabal file. Cabal doesn't support these yet, though. Maybe in the future. peace, isaac From ijones at syntaxpolice.org Fri Apr 22 03:17:46 2005 From: ijones at syntaxpolice.org (Isaac Jones) Date: Fri Apr 22 02:59:23 2005 Subject: [Haskell] cabal feature request In-Reply-To: <200504220231.58073.benjamin.franksen@bessy.de> (Benjamin Franksen's message of "Fri, 22 Apr 2005 02:31:57 +0200") References: <200504220231.58073.benjamin.franksen@bessy.de> Message-ID: <877jiv9t5x.fsf@syntaxpolice.org> Benjamin Franksen writes: > I finally succeeded using cabal for a project that uses hsc2hs. My problem > was/is I need to give special options to hsc2hs, for instance a different > template header file to use. Cabal doesn't support this at the moment. > > I propose to give the user a bit more flexibility with regard to > preprocessors, i.e. add some more tags to the .cabal file, like > > hsc2hs-options, cpp-options, ... > > I made the necessary changes for hsc2hs-options in a few minutes Did you alter the Cabal library itself? If so, then that won't work when you go to distribute it to others, since they won't have your altered cabal. You could do this in the UserHooks, by over-riding the hsc2hs preprocessor in your Setup.lhs file. If you grab the cabal source, there's an example in the tests directory called withHooks that might help. That, and looking at the cabal source itself :) > (thanks to the nicely structured cabal libraries :). :) > Another question: Is there a proposal how to (better) support test > executables for a library package? (I remember that this topic has > been discussed but can't remember any conclusion). With the latest (darcs / cvs) version of Cabal, you can add a UserHook for running tests, then there's a target ./setup test that'll execute that hook. We put the hook in Cabal 1.0, but forgot to add the command, so nothing calls it. Feel free to add the test hook so that people using newer versions of cabal can run your tests :) peace, isaac From iclp2005 at iiia.csic.es Thu Apr 21 11:10:14 2005 From: iclp2005 at iiia.csic.es (ICLP 2005) Date: Fri Apr 22 05:02:00 2005 Subject: [Haskell] ICLP 2005: Call for Papers Message-ID: Preliminary Call for Papers ------------------------------------------------------------ Twenty first International Conference on Logic Programming ICLP'05 2-5 October, 2005 Sitges (Barcelona) Spain Co-located with the International Conference on Principles and Practice of Constraint Programming (CP'05) ------------------------------------------------------------ http://www.iiia.csic.es/iclp2005/ [* Please note that ICLP'05 has a doctoral consortium for the first time as well as a special industrial paper session (details below). * Note that ICLP05's dates intersect with a solar eclipse visible in Barcelona ]. The Conference -------------- The 21st International Conference on Logic Programming will be held near Barcelona (Spain) from October 2nd to October 5th, 2005. ICLP'05 will be colocated with the International Conference on Principles and Practice of Constraint Programming (CP'05). Conference scope ---------------- Since the first conference held in Marseilles in 1982, ICLP has been the premier international conference for presenting research in logic programming. Contributions (papers and posters) are sought in all areas of logic programming including but not restricted to: Theory Implementation Semantic Foundations Compilation Formalisms Memory Management Nonmonotonic Reasoning Virtual Machines Knowledge Representation Parallelism Environments Alternative Paradigms Program Analysis Constraint Logic Programming Program Transformation Abductive Logic Programming Validation and Verification Inductive Logic Programming Debugging, Profiling Answer Set Programming Language Issues Applications Concurrency Semantic Web Objects Software Engineering Coordination Web Tools Mobility Internet Agents Higher Order Artificial Intelligence Types Deductive Databases Modes Natural Language Programming Techniques Specific attention will be given to work providing novel integrations of these different areas, and to new applications of logic programming in general. Contributions on applications will be assessed with an emphasis on their impact and synergy with other areas, as opposed to technical maturity. Applications of logic programming to the Semantic Web are especially encouraged. The technical program will include several invited talks and advanced tutorials, in addition to the presentations of the accepted papers and posters. A special session on industrial applications of logic programming is also planned and several workshops will be held in parallel with the conference. For the first time, a doctoral student consortium will be organized as part of ICLP. Papers ------- Papers must describe original, previously unpublished research, and must not be simultaneously submitted for publication elsewhere. They must be written in English and not exceed 15 pages in Springer LNCS format. The authors are encouraged, although not obliged, to submit their papers already in Springer LNCS format. General information about the Springer LNCS series and the LNCS authors' instructions are available at the Springer LNCS/LNAI home page (http://www.springer.de/comp/lncs/index.html). Papers should express their contribution clearly, both in general and technical terms. It is essential to identify what was accomplished, describe its significance, and explain how the paper compares with and advances previous work. Authors should make every effort to make the technical content understandable to a broad audience. The primary means of submission will be electronic, in pdf format. If electronic submission is not possible, five hard copies should be sent to one of the program co-chairs. More information on the submission procedure will be available at http://www.easychair.org/ICLP2005/submit/ Industrial Papers ----------------- A special session on industrial applications of logic programming is also planned during the conference. Papers accepted in this session will describe innovative applications of logic programming to industrial problems. The application's innovativeness and industrial impact will be the main criteria used for judging the paper. Papers accepted for this session will be published in the proceedings as shorter, (up to) 10 pages papers. Posters ------- Posters provide a forum for presenting work in an informal and interactive setting. They are ideal for discussing current work not yet ready for publication, for PhD thesis summaries and research project overviews. Accepted posters will also get a 10 minute slot for presentation during the conference. Extended abstract (2 pages) of each accepted poster will be published in the proceedings. Posters must be submitted electronically. More information on the submission procedure will be available at http://www.easychair.org/ICLP2005/submit/ Doctoral Student Consortium --------------------------- The Doctoral Consortium will provide an opportunity for students pursuing their doctoral thesis in logic programming and related areas to explore their research interests under the guidance of a panel of distinguished experts in the field. The Doctoral Consortium will also offer invited speakers and discussion groups. The Consortium will allow participants to interact with established researchers and with other students, through presentations, question-answer sessions, panel discussions, and invited presentations. A separate call-for-participation will be issued for the doctoral consortium. About 6 to 8 students will be selected for the consortium. Selected students will also present their research in the poster session. The abstract of the poster will be published in the conference proceedings. Financial support for selected students may be available. Publication ----------- The proceedings of the conference will be published by Springer-Verlag in the LNCS series. The proceedings will include the accepted papers and the abstracts of accepted posters. Sponsoring and prizes --------------------- The conference is sponsored by the Association for Logic Programming. The ALP has funds to assist financially disadvantaged participants. The ALP is planning to sponsor two prizes for ICLP'05: for the best technical paper and for the best application paper. Important dates --------------- POSTERS PAPERS Abstract submission deadline: 30 April Submission deadline: 1 June 6 May Notification of authors: 1 July 24 June Camera-ready copy due: 15 July 15 July Organization ------------ Conference Co-Chairs: Pedro Meseguer (IIIA-CSIC, Spain) Javier Larrosa (Technical University of Catalonia, Spain) Program Co-Chairs: Maurizio Gabbrielli (University of Bologna, Italy) Gopal Gupta (University of Texas at Dallas, USA) Workshop Chair: Hai-Feng Guo (University of Nebraska at Omaha, USA) Doctoral Consortium Chair: Enrico Pontelli (New Mexico State University, USA) Publicity Chair: Felip Manya (IIIA-CSIC, Spain) Program Committee: Roberto Bagnara University of Parma, Italy Maurice Bruynooghe KU Leuven, Belgium Giorgio Delzanno University of Genova, Italy Stefan Decker Digital Enterprise Research Institute, Ireland Thom Fruehwirth University of Ulm, Germany Maurizio Gabbrielli University of Bologna, Italy (Program Co-Chair) Gopal Gupta University of Texas at Dallas, USA (Program Co-Chair) Patricia Hill University of Leeds, UK Joxan Jaffar University of Singapore, Singapore Bharat Jayaraman SUNY Buffalo, USA Javier Larrosa Technical University of Catalonia, Spain (Conference Co-Chair) Michael Leuschel University of Dusseldorf, Germany Massimo Marchiori University of Venice, Italy and W3C, MIT, USA Pedro Meseguer IIIA-CSIC, Spain (Conference Co-Chair) Juan J. Moreno Navarro Technical University of Madrid, Spain Gopalan Nadathur University of Minnesota, USA Ilkka Niemela Helsinki U. of Tech. Finland Catuscia Palamidessi INRIA, France Enrico Pontelli New Mexico State Univeristy, USA I.V. Ramakrishnan SUNY Stony Brook, USA Vitor Santos Costa Federal U. of Rio de Janeiro, Brazil Harald Sondergaard University of Melbourne, Australia Peter Stuckey University of Melbourne, Australia Frank Valencia University of Uppsala, Sweden Contact addresses ----------------- Conference Chairs: Pedro Meseguer Javier Larrosa IIIA-CSIC Dep. LSI, UPC Campus UAB Jordi Girona 1-3 08193 Bellaterra, Spain 08034 Barcelona, Spain Program Co-chairs: iclp05-chairs@cs.unibo.it Maurizio Gabbrielli Gopal Gupta Department of Computer Science Department of Computer Sciences MS EC31 University of Bologna The University of Texas at Dallas Mura A. Zamboni 7 2601 N. Floyd Rd 40127 Bologna, Italy Richardson, TX 78050, USA From benjamin.franksen at bessy.de Fri Apr 22 05:49:12 2005 From: benjamin.franksen at bessy.de (Benjamin Franksen) Date: Fri Apr 22 05:31:04 2005 Subject: [Haskell] cabal feature request In-Reply-To: <877jiv9t5x.fsf@syntaxpolice.org> References: <200504220231.58073.benjamin.franksen@bessy.de> <877jiv9t5x.fsf@syntaxpolice.org> Message-ID: <200504221149.13036.benjamin.franksen@bessy.de> On Friday 22 April 2005 09:17, Isaac Jones wrote: > Benjamin Franksen writes: > > I finally succeeded using cabal for a project that uses hsc2hs. My > > problem was/is I need to give special options to hsc2hs, for > > instance a different template header file to use. Cabal doesn't > > support this at the moment. > > > > I propose to give the user a bit more flexibility with regard to > > preprocessors, i.e. add some more tags to the .cabal file, like > > > > hsc2hs-options, cpp-options, ... > > > > I made the necessary changes for hsc2hs-options in a few minutes > > Did you alter the Cabal library itself? Yes. > If so, then that won't work > when you go to distribute it to others, since they won't have your > altered cabal. Yes, that's why I suggested to add such tags to the official version. > You could do this in the UserHooks, by over-riding the hsc2hs > preprocessor in your Setup.lhs file. If you grab the cabal source, > there's an example in the tests directory called withHooks that might > help. That, and looking at the cabal source itself :) > > > Another question: Is there a proposal how to (better) support test > > executables for a library package? (I remember that this topic has > > been discussed but can't remember any conclusion). > > With the latest (darcs / cvs) version of Cabal, you can add a > UserHook for running tests, then there's a target ./setup test > that'll execute that hook. Ok, I will try to find out how to use user hooks for what I need. > We put the hook in Cabal 1.0, but forgot to add the command, so > nothing calls it. Feel free to add the test hook so that people > using newer versions of cabal can run your tests :) Yup. (Not that the stuff is ready for distribution.) Thanx, Ben From benjamin.franksen at bessy.de Fri Apr 22 06:27:33 2005 From: benjamin.franksen at bessy.de (Benjamin Franksen) Date: Fri Apr 22 06:09:08 2005 Subject: [Haskell] haddock -cpp ? Cabal support for haddock ? In-Reply-To: <87pswn9tet.fsf@syntaxpolice.org> References: <4267E0FF.5050107@imn.htwk-leipzig.de> <87pswn9tet.fsf@syntaxpolice.org> Message-ID: <200504221227.33962.benjamin.franksen@bessy.de> On Friday 22 April 2005 09:12, Isaac Jones wrote: > Johannes Waldmann writes: > > What is the preferred way to generate haddockumentation > > from code that must be preprocessed (ghc -cpp)? > > > > Would Cabal support this? > > Cabal does support this. If you use the CPP extension, it'll > preprocess the code before running haddock on it. > > > I'd certainly welcome Cabal support for other haddock features as > > well (--source, --read-interface). I am not sure where to put all > > these arguments in the .cabal file. > > Cabal doesn't support these yet, though. Maybe in the future. Dear Isaac, for the next release, I think *every* external program used by Cabal should get a xyz-options (free form) tag to give additional options. We already have them for linker, c-compiler, and hs-compiler, but not yet for preprocessors and doc generators (haddock). This is very easy to implement, does no harm at all, and greatly increases cabal's flexibility as a build tool. (BTW, I can send you a darcs patch if you are too busy at the moment.) Ben From simonmar at microsoft.com Fri Apr 22 10:26:40 2005 From: simonmar at microsoft.com (Simon Marlow) Date: Fri Apr 22 10:26:48 2005 Subject: [Haskell] haddock -cpp ? Cabal support for haddock ? Message-ID: <3429668D0E777A499EE74A7952C382D10381B372@EUR-MSG-01.europe.corp.microsoft.com> On 21 April 2005 18:21, Johannes Waldmann wrote: > What is the preferred way to generate haddockumentation > from code that must be preprocessed (ghc -cpp)? Either use ghc -E -cpp, or Cabal to preprocess the files. > Would Cabal support this? I'd certainly welcome Cabal support > for other haddock features as well (--source, --read-interface). > I am not sure where to put all these arguments in the .cabal file. > > And ... could we have something in haddock like JavaDoc's "@since" > tag? That's a reasonable suggestion... I doubt I'll have time to implement it soon, but patches are always welcome. Cheers, Simon From ijones at syntaxpolice.org Fri Apr 22 11:09:01 2005 From: ijones at syntaxpolice.org (Isaac Jones) Date: Fri Apr 22 11:20:19 2005 Subject: [Haskell] haddock -cpp ? Cabal support for haddock ? In-Reply-To: <200504221227.33962.benjamin.franksen@bessy.de> (Benjamin Franksen's message of "Fri, 22 Apr 2005 12:27:33 +0200") References: <4267E0FF.5050107@imn.htwk-leipzig.de> <87pswn9tet.fsf@syntaxpolice.org> <200504221227.33962.benjamin.franksen@bessy.de> Message-ID: <87pswm7ss2.fsf@syntaxpolice.org> (CC'ing libraries) (snip) >> > I'd certainly welcome Cabal support for other haddock features as >> > well (--source, --read-interface). I am not sure where to put all >> > these arguments in the .cabal file. >> >> Cabal doesn't support these yet, though. Maybe in the future. > > Dear Isaac, > > for the next release, I think *every* external program used by Cabal > should get a xyz-options (free form) tag to give additional options. We > already have them for linker, c-compiler, and hs-compiler, but not yet > for preprocessors and doc generators (haddock). This is very easy to > implement, does no harm at all, and greatly increases cabal's > flexibility as a build tool. (BTW, I can send you a darcs patch if you > are too busy at the moment.) And in the other thread you said: >> > I made the necessary changes for hsc2hs-options in a few minutes You added hsc2hs-options to the package description? Cool. I'm happy to get a patch to add options fields to all the preprocessors and haddock and anything else we may have missed. There are basically 3 ways that people can customize their packages: - the .cabal file - the Setup script with UserHooks - flags to configure I was originally thinking of these extra flags as something to pass to configure, but actually putting them in the description file would be more consistent with what we have already... One trick, though, is to make sure that the parser test cases for cabal still run when you make the changes. It's all too common for someone to add a field and break the parser or pretty printer. The important thing is that when you parse it, pretty print it, and parse it again it comes out the same. Check out tests/ModuleTest.hs > (BTW, I can send you a darcs patch if you are too busy at the > moment.) I like patches whether I'm busy or not. It'll definitely get done faster ;) BTW, I'm tracking this feature request in the Debian bug tracking system for the haskell-cabal package. peace, isaac From benjamin.franksen at bessy.de Fri Apr 22 16:06:04 2005 From: benjamin.franksen at bessy.de (Benjamin Franksen) Date: Fri Apr 22 15:49:39 2005 Subject: [Haskell] haddock -cpp ? Cabal support for haddock ? In-Reply-To: <87pswm7ss2.fsf@syntaxpolice.org> References: <4267E0FF.5050107@imn.htwk-leipzig.de> <200504221227.33962.benjamin.franksen@bessy.de> <87pswm7ss2.fsf@syntaxpolice.org> Message-ID: <200504222206.04703.benjamin.franksen@bessy.de> On Friday 22 April 2005 17:09, Isaac Jones wrote: > >> > I'd certainly welcome Cabal support for other haddock features as > >> > well (--source, --read-interface). I am not sure where to put all > >> > these arguments in the .cabal file. > >> > >> Cabal doesn't support these yet, though. Maybe in the future. > > > > Dear Isaac, > > > > for the next release, I think *every* external program used by Cabal > > should get a xyz-options (free form) tag to give additional options. We > > already have them for linker, c-compiler, and hs-compiler, but not yet > > for preprocessors and doc generators (haddock). This is very easy to > > implement, does no harm at all, and greatly increases cabal's > > flexibility as a build tool. (BTW, I can send you a darcs patch if you > > are too busy at the moment.) > > And in the other thread you said: > >> > I made the necessary changes for hsc2hs-options in a few minutes > > You added hsc2hs-options to the package description? Cool. I'm happy > to get a patch to add options fields to all the preprocessors and > haddock and anything else we may have missed. I'll give it a try. > There are basically 3 ways that people can customize their packages: > - the .cabal file > - the Setup script with UserHooks > - flags to configure > > I was originally thinking of these extra flags as something to pass to > configure, but actually putting them in the description file would be > more consistent with what we have already... 'Flags to configure' is -- at least in my case -- not the correct solution, because only the package author knows what extra options are necessary. The user shouldn't need to bother with it. I haven't looked very deeply into UserHooks yet, but I think passing extra options is common enough to justify dot-cabal tags. > One trick, though, is to make sure that the parser test cases for > cabal still run when you make the changes. It's all too common for > someone to add a field and break the parser or pretty printer. The > important thing is that when you parse it, pretty print it, and parse > it again it comes out the same. Check out tests/ModuleTest.hs Ok, I will add test cases and make sure all tests pass before sending anything. Cheers, Ben From kh at dcs.st-and.ac.uk Sat Apr 23 06:01:50 2005 From: kh at dcs.st-and.ac.uk (Kevin Hammond) Date: Sat Apr 23 05:43:27 2005 Subject: [Haskell] 2 Chairs at St Andrews Message-ID: University of St Andrews As part of an ongoing programme of expansion, applications are invited for the following posts in Computer Science. 2 Chairs () You should have an outstanding international record of research and publication or the equivalent industrial experience. The new Chairs will play a leading role in the continuing development of the School's expansion and will be expected to form new research groups. The School currently has 2 professors, 2 readers, 4 senior lecturers, 7 lecturers, and 10 post-doctoral fellows and provides a stimulating environment for research and teaching. It has a Research Selectivity Rating of 5A and an SSR of about 10:1. A new Computer Science building has just been constructed. Further particulars are available as a Microsoft Word document at (http://www.dcs.st-and.ac.uk/news/CS_FP_2005.doc) Please quote the appropriate reference. Closing Date: 29 April 2005 Application forms available from http://www.st-andrews.ac.uk/hr/recruitment/vacancies or from Human Resources, University of St Andrews, College Gate, North Street, St Andrews, Fife KY16 9AJ, (tel: 01334 462571, by fax 01334 462570 or by e-mail Jobline@st-andrews.ac.uk). The University is committed to equality of opportunity. From chak at cse.unsw.edu.au Sat Apr 23 10:39:09 2005 From: chak at cse.unsw.edu.au (Manuel M T Chakravarty) Date: Sat Apr 23 10:20:44 2005 Subject: [Haskell] HTML version of the H98 FFI Addendum Message-ID: <1114267150.6558.200.camel@JustTesting.cse.unsw.edu.au> Finally! The Haskell 98 addendum for the Foreign Function Interface 1.0 in HTML format. Browse online or download at http://www.cse.unsw.edu.au/~chak/haskell/ffi/ I apologise for the slowness in producing this format. Manuel PS: XHTML 1.0 with CSS 2.1 produced by tex4ht PPS: Shouldn't this be hosted at haskell.org? From dominic.steinitz at blueyonder.co.uk Sun Apr 24 11:04:12 2005 From: dominic.steinitz at blueyonder.co.uk (Dominic Steinitz) Date: Sun Apr 24 10:46:43 2005 Subject: [Haskell] Announce: Haskell Cryptographic Library 2.0.1 Message-ID: <426BB56C.50208@blueyonder.co.uk> I would like to announce the release of a new version of the Haskell Cryptographic Library. It now uses darcs and cabal and provides the modules listed below. The most significant change is in the way ASN.1 is handled. This has been made generic enough to handle PKCS#8 private keys and X.509 certificates. For further information see http://www.haskell.org/crypto. Dominic. Codec.ASN1 Codec.ASN1.BER Codec.ASN1.PKCS8 Codec.ASN1.TLV Codec.ASN1.X509 Codec.Binary.Base64 Codec.Encryption.AES Codec.Encryption.Blowfish Codec.Encryption.DES Codec.Encryption.Modes Codec.Encryption.Padding Codec.Encryption.RSA Codec.Encryption.RSA.EMEOAEP Codec.Encryption.RSA.MGF Codec.Encryption.RSA.NumberTheory Codec.Utils Data.Digest.MD5 Data.Digest.SHA1 Data.LargeWord From alethenorio at home.se Sun Apr 24 12:01:34 2005 From: alethenorio at home.se (Alexandre Weffort Thenorio) Date: Sun Apr 24 11:37:10 2005 Subject: [Haskell] Read and write file on Windows XP. References: <001b01c54685$26fda940$2097fea9@janxp><003501c54688$c07aff70$2097fea9@janxp> <4267FB4A.1070702@lochan.org><001401c546cb$ef1ae5f0$5a45b652@alethenorio><000501c54749$44dcc170$5a45b652@alethenorio> <89ca3d1f050422081676b4e44d@mail.gmail.com><006b01c54756$52705420$5a45b652@alethenorio><4269272E.40102@fastmail.fm> <001001c5475d$5e4ecb80$5a45b652@alethenorio> Message-ID: <001b01c548e6$e3ce6740$5a45b652@alethenorio> I have a small program which simply reads a text file, gets the second line and changes it and writes a clone file with the second line changed. Basically it looks like that: main :: IO() main =do -- Some code here hexFile <- catch (readFile "int.hex") (\_ -> do putStrLn "File int.hex not found" getLine exitWith ExitSuccess) --some code here newLine <- outputLine keyno key (lines(hexFile)) --finish code for main function here outputLine keyno key orgFile = do -- Some code that modifies second line here newHexFile <- openFile "newint.hex" WriteMode hPutStrLn newHexFile (orgFile!!0 ++ "\n" ++ final ++ unlines (drop 2 orgFile)) The final variable above is the string containing the second line. What happens is everything works fine on my PC (Windows 2000) but on another PC (Using Windows XP) it sometimes gives a file which is incomplete, a couple of lines missing in the end making the file smaller and wrong. So I was wondering could it be the computer itself or is there any issue with Windows XP when it comes to reading and writing files. I tried using openFileEx but to my surprise it says it is deprecated (Which function to se instead then?). Best Regards NooK From tomasz.zielonka at gmail.com Sun Apr 24 13:56:34 2005 From: tomasz.zielonka at gmail.com (Tomasz Zielonka) Date: Sun Apr 24 13:38:07 2005 Subject: [Haskell] Read and write file on Windows XP. In-Reply-To: <001b01c548e6$e3ce6740$5a45b652@alethenorio> References: <001001c5475d$5e4ecb80$5a45b652@alethenorio> <001b01c548e6$e3ce6740$5a45b652@alethenorio> Message-ID: <20050424175634.GA2436@students.mimuw.edu.pl> On Sun, Apr 24, 2005 at 06:01:34PM +0200, Alexandre Weffort Thenorio wrote: > outputLine keyno key orgFile = do > -- Some code that modifies > second line here > newHexFile <- openFile > "newint.hex" WriteMode > hPutStrLn newHexFile > (orgFile!!0 ++ "\n" ++ final ++ unlines (drop 2 orgFile)) > > What happens is everything works fine on my PC (Windows 2000) but on another > PC (Using Windows XP) it sometimes gives a file which is incomplete, a > couple of lines missing in the end making the file smaller and wrong. Maybe try hClose'ing the newHexFile at the end of outputLine...? Best regards Tomasz From Frank.Rosemeier at FernUni-Hagen.de Mon Apr 25 04:16:34 2005 From: Frank.Rosemeier at FernUni-Hagen.de (Frank Rosemeier) Date: Mon Apr 25 03:57:25 2005 Subject: [Haskell] Are there libraries for finite words and computable functions? Message-ID: <426CA762.40503@FernUni-Hagen.de> Dear Haskellers, I would like to know if there are Haskell libraries for finite words and recursive functions. With "finite words" I refer to a datatype similar to data Word a = Nil | Cons a !(Word a) . With "computable functions" I mean recursive functions, Turing machines, register machines or something like that. Thank you very much! Frank Rosemeier From waldmann at imn.htwk-leipzig.de Mon Apr 25 04:24:07 2005 From: waldmann at imn.htwk-leipzig.de (Johannes Waldmann) Date: Mon Apr 25 04:05:33 2005 Subject: [Haskell] Are there libraries for finite words and computable functions? In-Reply-To: <426CA762.40503@FernUni-Hagen.de> References: <426CA762.40503@FernUni-Hagen.de> Message-ID: <426CA927.5090401@imn.htwk-leipzig.de> > With "computable functions" I mean recursive functions, > Turing machines, register machines or something like that. my project "autotool" contains various models of computation. the program in fact can automatically grade student exercises that use these models. http://www.imn.htwk-leipzig.de/~waldmann/autotool.html http://141.57.11.163/auto/ -- -- Johannes Waldmann -- Tel/Fax (0341) 3076 6479/80 -- ---- http://www.imn.htwk-leipzig.de/~waldmann/ ------- From wangzaixiang at 21cn.com Mon Apr 25 04:32:37 2005 From: wangzaixiang at 21cn.com (wangzaixiang) Date: Mon Apr 25 04:14:10 2005 Subject: [Haskell] Is there any interpreter/compiler that runs on JVM? In-Reply-To: <426CA762.40503@FernUni-Hagen.de> Message-ID: Dear Haskellers, I am a beginer of the haskell language and still not familiar with it. Could anybody tell me, is there an implementation for the Java VM? It looks that hugs/ghc and other implementation are both implemented using C. Thanks Wangzx From rossberg at ps.uni-sb.de Mon Apr 25 07:13:05 2005 From: rossberg at ps.uni-sb.de (Andreas Rossberg) Date: Mon Apr 25 06:54:35 2005 Subject: [Haskell] MPTCs and type inference Message-ID: <426CD0C1.8040903@ps.uni-sb.de> This may well be stupidity on my side, but some experiments with multi parameter type classes got me slightly confused. Can somebody explain the following behaviour to me? class D a b where fd :: a -> b -> () d1 x = let p = fd x in () d2 x = let p y = fd x y in () GHC derives the following types: d1 :: D a b => a -> () d2 :: a -> () Hugs rejects d1 on the grounds that the type is ambiguous, but agrees on the type of d2. I do not understand where the context disappears to in this example - in particular, when I compare with the single parameter case: class C a where fc :: a -> a -> () c1 x = let p = fc x in () c2 x = let p y = fc x y in () where c1 :: C a => a -> () c2 :: C a => a -> () is inferred, as I would expect. -- Andreas Rossberg, rossberg@ps.uni-sb.de Let's get rid of those possible thingies! -- TB From peter.padawitz at udo.edu Mon Apr 25 09:36:38 2005 From: peter.padawitz at udo.edu (Peter Padawitz) Date: Mon Apr 25 09:18:03 2005 Subject: [Haskell] SOEGraphics Message-ID: <426CF266.2090309@udo.edu> The Mar2005 release of Hugs includes SOEGraphics, but does not recognize the type constructor Draw. Has it been changed? Peter From ross at soi.city.ac.uk Mon Apr 25 11:30:24 2005 From: ross at soi.city.ac.uk (Ross Paterson) Date: Mon Apr 25 11:11:50 2005 Subject: [Haskell] SOEGraphics In-Reply-To: <426CF266.2090309@udo.edu> References: <426CF266.2090309@udo.edu> Message-ID: <20050425153023.GA12532@soi.city.ac.uk> On Mon, Apr 25, 2005 at 03:36:38PM +0200, Peter Padawitz wrote: > The Mar2005 release of Hugs includes SOEGraphics, but does not recognize > the type constructor Draw. Has it been changed? A little. SOEGraphics (aka Graphics.SOE) is the minimal interface needed to support the book. It is a subset of Graphics.HGL -- both are documented under http://www.haskell.org/ghc/docs/latest/html/libraries/index.html (The library is also included with GHC 6.4, on X11 systems.) From iavor.diatchki at gmail.com Mon Apr 25 13:41:59 2005 From: iavor.diatchki at gmail.com (Iavor Diatchki) Date: Mon Apr 25 13:23:23 2005 Subject: [Haskell] MPTCs and type inference In-Reply-To: <426CD0C1.8040903@ps.uni-sb.de> References: <426CD0C1.8040903@ps.uni-sb.de> Message-ID: <5ab17e7905042510412215adec@mail.gmail.com> Hello, The type inference for "d1", goes on like this: 1. suppose "x" is of some type "a" 2. now lets infer a type for "p" 3. using the usual rules we infer that "p :: b -> ()", subject to the constraint that "D a b" holds. 4. "p" does not look like a function so the monomorphism restriction applies, and we shall not attempt to infer a polymorphic type for "p", so the final type for "p :: b -> ()" (for a particular but yet unknown "b"). 5. now lets infer the body of the "let", it is of type "()" 6. now we can infer that "d1 :: a -> ()", if we can solve the goal "D a b" 7. "d1" looks like a function, so we can generalize its type, to get "forall a b. D a b => a -> ()" 8. This type is ambiguos, because the body of the function does not mention "b", so we could not really use this function. Hugs chooses to complain immediately, while GHC delays the error until the funciton is used in a particular place. The inference for "d2" is similar up to step 4, and then it proceeds like this: 4. "p" looks like a function, so we are going to generalize its type, to get: "forall b. D a b => b -> ()" (note that the quantifier is only over the "b", and there is no constraint to solve anymore, as it was "packaged" with the type of "p") 5. the body of the "let" is still () 6. the type of "d2" is "a -> ()", (no additional constraints) 7. "d2" looks like a function so we can generalize its type to get: "forall a. a -> ()" Basically the constraint disappeared in the second case, because it was due to the definition of "p", and "p" was never used. It is perhaps more surprising that it did not disappear in the first case: because of the monomorphism restriction,"p" cannot have a polymorphic type, and so all of its constraints are propagated to be constraints on its polymorphic "parent" ("d1"). Hope this helps -Iavor On 4/25/05, Andreas Rossberg wrote: > This may well be stupidity on my side, but some experiments with multi > parameter type classes got me slightly confused. Can somebody explain > the following behaviour to me? > > class D a b where fd :: a -> b -> () > > d1 x = let p = fd x in () > d2 x = let p y = fd x y in () > > GHC derives the following types: > > d1 :: D a b => a -> () > d2 :: a -> () > > Hugs rejects d1 on the grounds that the type is ambiguous, but agrees on > the type of d2. I do not understand where the context disappears to in > this example - in particular, when I compare with the single parameter case: > > class C a where fc :: a -> a -> () > > c1 x = let p = fc x in () > c2 x = let p y = fc x y in () > > where > > c1 :: C a => a -> () > c2 :: C a => a -> () > > is inferred, as I would expect. > > -- > Andreas Rossberg, rossberg@ps.uni-sb.de > > Let's get rid of those possible thingies! -- TB > > _______________________________________________ > Haskell mailing list > Haskell@haskell.org > http://www.haskell.org/mailman/listinfo/haskell > From alethenorio at home.se Mon Apr 25 15:34:55 2005 From: alethenorio at home.se (Alexandre Weffort Thenorio) Date: Mon Apr 25 15:10:42 2005 Subject: [Haskell] Read and write file on Windows XP. References: <001001c5475d$5e4ecb80$5a45b652@alethenorio> <001b01c548e6$e3ce6740$5a45b652@alethenorio> <20050424175634.GA2436@students.mimuw.edu.pl> Message-ID: <001701c549cd$e0e75ef0$5a45b652@alethenorio> I think it might have solved it m8 (Worked the few times I tested). Thanks though I don't really understand why. Best Regards Alex ----- Original Message ----- From: "Tomasz Zielonka" To: "Alexandre Weffort Thenorio" Cc: Sent: Sunday, April 24, 2005 7:56 PM Subject: Re: [Haskell] Read and write file on Windows XP. > On Sun, Apr 24, 2005 at 06:01:34PM +0200, Alexandre Weffort Thenorio wrote: > > outputLine keyno key orgFile = do > > -- Some code that modifies > > second line here > > newHexFile <- openFile > > "newint.hex" WriteMode > > hPutStrLn newHexFile > > (orgFile!!0 ++ "\n" ++ final ++ unlines (drop 2 orgFile)) > > > > What happens is everything works fine on my PC (Windows 2000) but on another > > PC (Using Windows XP) it sometimes gives a file which is incomplete, a > > couple of lines missing in the end making the file smaller and wrong. > > Maybe try hClose'ing the newHexFile at the end of outputLine...? > > Best regards > Tomasz > > From iavor.diatchki at gmail.com Mon Apr 25 18:45:45 2005 From: iavor.diatchki at gmail.com (Iavor Diatchki) Date: Mon Apr 25 18:27:08 2005 Subject: [Haskell] MPTCs and type inference In-Reply-To: <20050425195526.GD8680@pimlott.net> References: <426CD0C1.8040903@ps.uni-sb.de> <5ab17e7905042510412215adec@mail.gmail.com> <20050425195526.GD8680@pimlott.net> Message-ID: <5ab17e79050425154510bdc971@mail.gmail.com> Hello, On 4/25/05, Andrew Pimlott wrote: > I appreciated your explanation, but can you also address (to the list) > the last case given by the original poster? > > > On 4/25/05, Andreas Rossberg wrote: > > > in particular, when I compare with the single parameter case: > > > > > > class C a where fc :: a -> a -> () > > > > > > c1 x = let p = fc x in () > > > c2 x = let p y = fc x y in () > > > > > > where > > > > > > c1 :: C a => a -> () > > > c2 :: C a => a -> () > > > > > > is inferred, as I would expect. The inference steps for this case are much the same except, that the inferred type for "p" now will be: "a -> ()", provided that we can solve the constraint "C a". Because we have assumptions about "a" in the environment (namely it is mentioned in the type of the varible "x") we cannot generalize the type of "p". It therefore remains monomorphic, and the constraint "C a" is propagated to the type of "c2". -Iavor From ashley at semantic.org Tue Apr 26 05:07:02 2005 From: ashley at semantic.org (Ashley Yakeley) Date: Tue Apr 26 04:50:21 2005 Subject: [Haskell] Re: ANNOUNCE: The jhc Haskell compiler. References: <20050420090422.0A0C0368257@www.haskell.org> <20050420232629.253.qmail@web26203.mail.ukl.yahoo.com> <20050420235839.GL8142@momenergy.repetae.net> Message-ID: In article <20050420235839.GL8142@momenergy.repetae.net>, John Meacham wrote: > > Very interesting! What license uses jhc? The COPYING file seems to be empty. > > It is under the GPL. Does that mean my program will be GPL if I compile it with jhc? -- Ashley Yakeley, Seattle WA From dot at dotat.at Tue Apr 26 05:15:00 2005 From: dot at dotat.at (Tony Finch) Date: Tue Apr 26 04:56:52 2005 Subject: [Haskell] Re: ANNOUNCE: The jhc Haskell compiler. In-Reply-To: References: <20050420090422.0A0C0368257@www.haskell.org> <20050420232629.253.qmail@web26203.mail.ukl.yahoo.com> <20050420235839.GL8142@momenergy.repetae.net> Message-ID: On Tue, 26 Apr 2005, Ashley Yakeley wrote: > > Does that mean my program will be GPL if I compile it with jhc? No; cf. gcc. Tony. -- f.a.n.finch http://dotat.at/ BISCAY: WEST 5 OR 6 BECOMING VARIABLE 3 OR 4. SHOWERS AT FIRST. MODERATE OR GOOD. From iclp2005 at iiia.csic.es Mon Apr 25 10:00:41 2005 From: iclp2005 at iiia.csic.es (ICLP 2005) Date: Tue Apr 26 08:00:25 2005 Subject: [Haskell] ICLP 2005 Doctoral Consortium: Call for Applications Message-ID: International Conference on Logic Programming Doctoral Consortium Sitges (Barcelona), Spain October 2-5, 2005 http://www.cs.nmsu.edu/~epontell/DC2005 ----------- The ICLP Doctoral Consortium (DC) is the first ever doctoral consortium to be offered as part of the International Conference on Logic Programming. The DC will take place during ICLP 2005 in Sitges (Barcelona), Spain. The Doctoral Consortium is designed for doctoral students working in areas related to logic programming, who are planning to pursue a career in academia. The Doctoral Consortium aims to provide students with an opportunity to present and discuss their research directions and to obtain feedbacks from peers as well as world-renown experts in the field. The Doctoral Consortium will also offer invited speakers and panels discussions. ------------ The Doctoral Consortium is held the during the regular activities of the ICLP 2005 Conference. The aims of the Doctoral Consortium are: * To provide doctoral students working in the field of logic programming with a friendly and open forum to present their research ideas, listen to ongoing work from peer students, and receive constructive feedback * To provide students with relevant information about important issues for doctoral candidates and future academics * To develop a supportive community of scholars and a spirit of collaborative research. * To support a new generation of researchers with information and advice on academic, research, industrial, and non- traditional career paths. The Consortium is designed for students currently enrolled in a Ph.D. program, though we are also open to exceptions (e.g., students currently in a Masters program and interested in doctoral studies). The Consortium is for students at any stage of their doctoral studies are welcome to apply. Applicants are expected to be conducting research in the field of Logic Programming; topics of interest include (but are not limited to): * Theoretical Foundations of Logic and Constraint Logic Programming * Sequential and Parallel Implementation Technology * Static and Dynamic Analysis, Abstract Interpretation, Compilation Technology, Verification * Logic-based Paradigms (e.g., Answer Set Programming, Concurrent Logic Programming, Inductive Logic Programming) * Innovative Applications of Logic Programming The Consortium allows participants to interact with established researchers and with other students, through presentations, question- answer sessions, panel discussions, and invited presentations. The Doctoral Consortium will provide the possibility to reflect - through short activities, information sessions, and discussions - on the process and lessons of research and life in academia. Each participant will give a short, critiqued, research presentation. The Doctoral Consortium will be held on a date to be determined, in parallel with the regular activities of the ICLP 2005 conference; the ICLP conference will run from October 2nd to October 5th, 2005. Doctoral Consortium participants will be offered the opportunity to have their abstracts published in the ICLP 2005 conference proceedings. Discussants: Several renown faculty members and researchers in the field of Logic Programming will join in evaluating the submission packets and will participate in the Doctoral Consortium, providing feedback to the presenters. The list of the discussants will be published at a later date. -------- Detailed submission instructions can be found in the ICLP 2005 Doctoral Consortium web site, at: http://www.cs.nmsu.edu/~epontell/DC2005 -------- Important Dates Submission Deadline: June 1st, 2005 Acceptance Notification: July, 1st 2005 Last Date to Update Research Summary: July 15th, 2005 Doctoral Consortium: October 2-5, 2005 ICLP 2005 Conference: October 2-5, 2005 ------------ Doctoral Consortium Chair: Enrico Pontelli Department of Computer Science New Mexico State University MSC CS, Box 30001 Las Cruces, NM 88003, USA epontell _a_t_ cs.nmsu.edu From rossberg at ps.uni-sb.de Tue Apr 26 09:42:45 2005 From: rossberg at ps.uni-sb.de (Andreas Rossberg) Date: Tue Apr 26 09:24:09 2005 Subject: [Haskell] MPTCs and type inference In-Reply-To: <5ab17e79050425154510bdc971@mail.gmail.com> References: <426CD0C1.8040903@ps.uni-sb.de> <5ab17e7905042510412215adec@mail.gmail.com> <20050425195526.GD8680@pimlott.net> <5ab17e79050425154510bdc971@mail.gmail.com> Message-ID: <426E4555.7010406@ps.uni-sb.de> Thanks for the detailed explanation that helped clearing up the smog in my head. I reckoned that once more the MR was to blame, at least for part of it. >>>>in particular, when I compare with the single parameter case: >>>> >>>> class C a where fc :: a -> a -> () >>>> >>>> c1 x = let p = fc x in () >>>> c2 x = let p y = fc x y in () >>>> >>>>where >>>> >>>> c1 :: C a => a -> () >>>> c2 :: C a => a -> () >>>> >>>>is inferred, as I would expect. > > The inference steps for this case are much the same except, that the > inferred type for "p" now will be: "a -> ()", provided that we can > solve the constraint "C a". Because we have assumptions about "a" in > the environment (namely it is mentioned in the type of the varible > "x") we cannot generalize the type of "p". It therefore remains > monomorphic, and the constraint "C a" is propagated to the type of > "c2". To be more precise, p is not polymorphic *in the variables mentioned by the constraint* - the overall type of p could still be polymorphic, without changing the outcome. My understanding now is as follows: a constraint is captured by a declaration if at least one of the type variables mentioned in the constraint is generalised in the respective type scheme. Is that a correct interpretation? Of course, this is not the only possible rule. Alternatively, generalisation could always capture *all* unresolved constraints. For example, the type of p in c2 could be C a => a->() without a being quantified. That looks a bit more uniform in the face of MPTCs and would allow more programs, because contexts induced by dead code in form of an unused declaration could be forgotten consistently, not just when some of its free variables happen to be bound by a local quantifier. -- Andreas Rossberg, rossberg@ps.uni-sb.de Let's get rid of those possible thingies! -- TB From benjamin.franksen at bessy.de Tue Apr 26 14:25:43 2005 From: benjamin.franksen at bessy.de (Benjamin Franksen) Date: Tue Apr 26 14:07:42 2005 Subject: [Haskell] Re: ANNOUNCE: The jhc Haskell compiler. In-Reply-To: References: <20050420090422.0A0C0368257@www.haskell.org> Message-ID: <200504262025.44474.benjamin.franksen@bessy.de> On Tuesday 26 April 2005 11:15, Tony Finch wrote: > On Tue, 26 Apr 2005, Ashley Yakeley wrote: > > Does that mean my program will be GPL if I compile it with jhc? > > No; cf. gcc. Fr details see http://www.gnu.org/licenses/gpl-faq.html#CanIUseGPLToolsForNF Ben From mykeyboard at 21cn.com Wed Apr 27 04:54:30 2005 From: mykeyboard at 21cn.com (Luo Shuli) Date: Wed Apr 27 04:37:17 2005 Subject: [Haskell] Undefined of Char.toUpper ? Message-ID: <426F5346.8020300@21cn.com> Dear Haskellers, I am a beginer of the haskell language and study it from <> of Hal Daume III. Example from the tutarial: Prelude> map Char.toUpper "Hello World" I try it on Hugs for windows32, compile error: ERROR - Undefined qualified variable "Char.toUpper" Could anybody tell me what's the matter with it? Thanks, Luo Shuli From sholderm at students.cs.uu.nl Wed Apr 27 04:59:31 2005 From: sholderm at students.cs.uu.nl (Stefan Holdermans) Date: Wed Apr 27 04:40:50 2005 Subject: [Haskell] Undefined of Char.toUpper ? In-Reply-To: <426F5346.8020300@21cn.com> References: <426F5346.8020300@21cn.com> Message-ID: Luo, > I try it on Hugs for windows32, compile error: > ERROR - Undefined qualified variable "Char.toUpper" It is possible that you forget to import the Char module first? Regards, Stefan From maeder at tzi.de Wed Apr 27 05:08:55 2005 From: maeder at tzi.de (Christian Maeder) Date: Wed Apr 27 04:50:15 2005 Subject: [Haskell] Undefined of Char.toUpper ? In-Reply-To: <426F5346.8020300@21cn.com> References: <426F5346.8020300@21cn.com> Message-ID: <426F56A7.3070403@tzi.de> Luo Shuli wrote: > Dear Haskellers, > I am a beginer of the haskell language and study it from < Haskell Tutarial>> of Hal Daume III. > Example from the tutarial: > Prelude> map Char.toUpper "Hello World" This works only with ghci > I try it on Hugs for windows32, compile error: > ERROR - Undefined qualified variable "Char.toUpper" > > Could anybody tell me what's the matter with it? In hugs load "Char" first with ":l Char" and then use toUpper unqualified: Char> map toUpper "Hello World" Christian From yimings at cgogo.com Wed Apr 27 05:36:55 2005 From: yimings at cgogo.com (Sun Yi Ming) Date: Wed Apr 27 05:17:43 2005 Subject: [Haskell] howto implement the getDirectoryContents by hand Message-ID: <20050427.173655.226781564.yimings@cgogo.com> hi all, i even know there is a getDirectoryContents function in lib,but that's implemented by primitive function getDirContents,so i try to implement it use openDirStream,readDirStream but failed to recursive the contents, below is my try code: module Test1 where import System.Directory import System.Posix.Directory import Control.Monad dirName = "/home/wise/source/haskell" ls :: FilePath -> IO [FilePath] ls dname = do dirs <- openDirStream dname path <- readDirStream dirs return [path] -- so how to recursive this test = print =<< ls dirName any help is appreciated. Sun Yi Ming From ozone at algorithm.com.au Wed Apr 27 07:16:16 2005 From: ozone at algorithm.com.au (Andre Pang) Date: Wed Apr 27 06:57:36 2005 Subject: [Haskell] Rank-N types vs existential types Message-ID: Hi all, Let's say I have the following two data types: > {-# OPTIONS_GHC -fglasgow-exts #-} > > module RankNVsExists where > > data RankN = RankNEq (forall a. Eq a => a -> a -> Bool) > | RankNOrd (forall a. Ord a => a -> a -> Bool) > > data Exists = forall a. Eq a => ExistsEq (a -> a -> Bool) > | forall a. Ord a => ExistsOrd (a -> a -> Bool) So, the RankN type uses rank-2 polymorphism to "hide" the expression inside the type, whereas the Exists type uses existentially quantified types instead. The two seem pretty equivalent to me, since the data constructors have the same type. However, I can't help but feel that I'm missing something fundamental about a difference between them. Are the two completely isomorphic? Is there some advantage or disadvantage to using one over the other? -- % Andre Pang : trust.in.love.to.save From kr.angelov at gmail.com Wed Apr 27 07:26:54 2005 From: kr.angelov at gmail.com (Krasimir Angelov) Date: Wed Apr 27 07:08:15 2005 Subject: [Haskell] Rank-N types vs existential types In-Reply-To: References: Message-ID: RankN and Exists are completelly different. The types of RankNEq and ExistsEq constructors are: RankNEq :: (forall a. Eq a => a -> a -> Bool) -> RankN ExistsEq :: forall a. Eq a => (a -> a -> Bool) -> Exists i.e. RankNEq requires one argument, which is a polymorfic function that have to be applied to Eq dictonary. ExistsEq have two arguments: an Eq dictonary and function of type (a -> a -> Bool). Cheers, Krasimir On 4/27/05, Andre Pang wrote: > Hi all, > > Let's say I have the following two data types: > > > {-# OPTIONS_GHC -fglasgow-exts #-} > > > > module RankNVsExists where > > > > data RankN = RankNEq (forall a. Eq a => a -> a -> Bool) > > | RankNOrd (forall a. Ord a => a -> a -> Bool) > > > > data Exists = forall a. Eq a => ExistsEq (a -> a -> Bool) > > | forall a. Ord a => ExistsOrd (a -> a -> Bool) > > So, the RankN type uses rank-2 polymorphism to "hide" the expression > inside the type, whereas the Exists type uses existentially quantified > types instead. The two seem pretty equivalent to me, since the data > constructors have the same type. However, I can't help but feel that > I'm missing something fundamental about a difference between them. Are > the two completely isomorphic? Is there some advantage or disadvantage > to using one over the other? > > -- > % Andre Pang : trust.in.love.to.save > > _______________________________________________ > Haskell mailing list > Haskell@haskell.org > http://www.haskell.org/mailman/listinfo/haskell > From tomasz.zielonka at gmail.com Wed Apr 27 07:27:13 2005 From: tomasz.zielonka at gmail.com (Tomasz Zielonka) Date: Wed Apr 27 07:08:43 2005 Subject: [Haskell] Rank-N types vs existential types In-Reply-To: References: Message-ID: <20050427112713.GA1744@students.mimuw.edu.pl> On Wed, Apr 27, 2005 at 09:16:16PM +1000, Andre Pang wrote: > >data RankN = RankNEq (forall a. Eq a => a -> a -> Bool) > > | RankNOrd (forall a. Ord a => a -> a -> Bool) > > > >data Exists = forall a. Eq a => ExistsEq (a -> a -> Bool) > > | forall a. Ord a => ExistsOrd (a -> a -> Bool) > > The two seem pretty equivalent to me, since the data > constructors have the same type. They don't: ExistsEq :: (Eq a) => (a -> a -> Bool) -> Exists RankNEq :: (forall a. (Eq a) => a -> a -> Bool) -> RankN Best regards Tomasz From rossberg at ps.uni-sb.de Wed Apr 27 07:35:04 2005 From: rossberg at ps.uni-sb.de (Andreas Rossberg) Date: Wed Apr 27 07:16:27 2005 Subject: [Haskell] Rank-N types vs existential types In-Reply-To: References: Message-ID: <426F78E8.4020709@ps.uni-sb.de> Andre Pang wrote: >> >> data RankN = RankNEq (forall a. Eq a => a -> a -> Bool) >> | RankNOrd (forall a. Ord a => a -> a -> Bool) >> >> data Exists = forall a. Eq a => ExistsEq (a -> a -> Bool) >> | forall a. Ord a => ExistsOrd (a -> a -> Bool) > > So, the RankN type uses rank-2 polymorphism to "hide" the expression > inside the type, whereas the Exists type uses existentially quantified > types instead. The two seem pretty equivalent to me, since the data > constructors have the same type. However, I can't help but feel that > I'm missing something fundamental about a difference between them. Are > the two completely isomorphic? Is there some advantage or disadvantage > to using one over the other? They don't have the same type. The types are RankNEq :: (forall a.Eq a => a->a->Bool) -> RankN ExistsEq :: forall a.Eq a => (a->a->Bool -> Exists) These are quite different beasts. The difference really shows up when you *use* (deconstruct) them: g (RankNEq f) = (f 4 5, f True False) This allows the embedded function to be used polymorphically. But: h (ExistsEq f) = ??? Here, you cannot use f at all (well, except with undefined). The type is not polymorphic in "a" on the RHS, it is abstract! You'd need to encapsulate a value of the same type (or a constructing function) as well to this type useful. -- Andreas Rossberg, rossberg@ps.uni-sb.de Let's get rid of those possible thingies! -- TB From ozone at algorithm.com.au Wed Apr 27 07:36:44 2005 From: ozone at algorithm.com.au (Andre Pang) Date: Wed Apr 27 07:18:06 2005 Subject: [Haskell] Rank-N types vs existential types In-Reply-To: References: Message-ID: <3d7ee400c2cdbe2836f8b49f14e1cfb8@algorithm.com.au> On 27/04/2005, at 9:26 PM, Krasimir Angelov wrote: > RankN and Exists are completelly different. The types of RankNEq and > ExistsEq constructors are: > > RankNEq :: (forall a. Eq a => a -> a -> Bool) -> RankN > ExistsEq :: forall a. Eq a => (a -> a -> Bool) -> Exists > > i.e. RankNEq requires one argument, which is a polymorfic function > that have to be applied to Eq dictonary. ExistsEq have two arguments: > an Eq dictonary and function of type (a -> a -> Bool). Thanks Krasimir and Tomasz for that clarification. Unfortunately, I'm still a bit confused :). Krasimir, from what you say, this sounds like a big difference in implementation, but from a Haskell (non-type-wizard) user's point of view, is there a practical difference between the two? I can't think of a situation where rank-N/existentials couldn't be substituted for the other ... -- % Andre Pang : trust.in.love.to.save From kr.angelov at gmail.com Wed Apr 27 07:50:56 2005 From: kr.angelov at gmail.com (Krasimir Angelov) Date: Wed Apr 27 07:32:13 2005 Subject: [Haskell] Rank-N types vs existential types In-Reply-To: <3d7ee400c2cdbe2836f8b49f14e1cfb8@algorithm.com.au> References: <3d7ee400c2cdbe2836f8b49f14e1cfb8@algorithm.com.au> Message-ID: Yes. There is a significant difference in both the internal representation and the high level representation. ExistsEq is a structure with two internal fields the dictionary and the function, while the RankNEq has only one field. As Andreas Rossberg noted ExistsEq is useless without extra fields. Here is an example which might be more useful: data Exists = Eq a => Exists (a -> a) a a next :: Exists -> Maybe Exists next (Exists f x y) | x == y = Nothing | otherwise = Just (Exists f (f x) y) Note that the only functions which I can apply over type 'a' are (==) and f. Cheers, Krasimir On 4/27/05, Andre Pang wrote: > On 27/04/2005, at 9:26 PM, Krasimir Angelov wrote: > > > RankN and Exists are completelly different. The types of RankNEq and > > ExistsEq constructors are: > > > > RankNEq :: (forall a. Eq a => a -> a -> Bool) -> RankN > > ExistsEq :: forall a. Eq a => (a -> a -> Bool) -> Exists > > > > i.e. RankNEq requires one argument, which is a polymorfic function > > that have to be applied to Eq dictonary. ExistsEq have two arguments: > > an Eq dictonary and function of type (a -> a -> Bool). > > Thanks Krasimir and Tomasz for that clarification. Unfortunately, I'm > still a bit confused :). Krasimir, from what you say, this sounds like > a big difference in implementation, but from a Haskell > (non-type-wizard) user's point of view, is there a practical difference > between the two? I can't think of a situation where > rank-N/existentials couldn't be substituted for the other ... > > > -- > % Andre Pang : trust.in.love.to.save > > From ozone at algorithm.com.au Wed Apr 27 07:56:00 2005 From: ozone at algorithm.com.au (Andre Pang) Date: Wed Apr 27 07:37:21 2005 Subject: [Haskell] Re: Rank-N types vs existential types In-Reply-To: <426F78E8.4020709@ps.uni-sb.de> References: <426F78E8.4020709@ps.uni-sb.de> Message-ID: On 27/04/2005, at 9:35 PM, Andreas Rossberg wrote: > The difference really shows up when you *use* (deconstruct) them: > > g (RankNEq f) = (f 4 5, f True False) > > This allows the embedded function to be used polymorphically. But: > > h (ExistsEq f) = ??? > > Here, you cannot use f at all (well, except with undefined). The type > is not polymorphic in "a" on the RHS, it is abstract! You'd need to > encapsulate a value of the same type (or a constructing function) as > well to this type useful. Ah, OK! That's quite enlightening. Thanks Andreas, Krasimir, and Tomasz for all your replies. -- % Andre Pang : trust.in.love.to.save From bortzmeyer at nic.fr Wed Apr 27 12:14:53 2005 From: bortzmeyer at nic.fr (Stephane Bortzmeyer) Date: Wed Apr 27 11:56:12 2005 Subject: [Haskell] Re: ANNOUNCE: The jhc Haskell compiler. In-Reply-To: <20050419115442.GJ8142@momenergy.repetae.net> References: <20050419115442.GJ8142@momenergy.repetae.net> Message-ID: <20050427161453.GA5405@nic.fr> On Tue, Apr 19, 2005 at 04:54:42AM -0700, John Meacham wrote a message of 375 lines which said: > There are still substantial issues which need to be overcome before > jhc can be used for general Haskell programing Do you plan to support ghc command-line flags? Because I tried to compile darcs with jhc and it failed because darcs' configure file uses specific flags: checking for ghc... /home/bortzmeyer/tmp/jhc/jhc/jhc checking where GHC keeps its libraries... unrecognized option `--print-libdir' Usage: jhc [OPTION...] Main.hs Or should I ask darcs' maintainer to consider supporting jhc? (It is an issue I had when trying to maintain autoconf macros for Java: the language is standard, not the compilers' options.) > * It takes ridiculous amounts of memory and CPU. A gigabyte of RAM > usage is not unheard of. Confirmed :-{ From john at repetae.net Wed Apr 27 18:56:38 2005 From: john at repetae.net (John Meacham) Date: Wed Apr 27 18:37:58 2005 Subject: [Haskell] Re: ANNOUNCE: The jhc Haskell compiler. In-Reply-To: <20050427161453.GA5405@nic.fr> References: <20050419115442.GJ8142@momenergy.repetae.net> <20050427161453.GA5405@nic.fr> Message-ID: <20050427225638.GB1307@momenergy.repetae.net> On Wed, Apr 27, 2005 at 06:14:53PM +0200, Stephane Bortzmeyer wrote: > On Tue, Apr 19, 2005 at 04:54:42AM -0700, > John Meacham wrote > a message of 375 lines which said: > > > There are still substantial issues which need to be overcome before > > jhc can be used for general Haskell programing > > Do you plan to support ghc command-line flags? Because I tried to > compile darcs with jhc and it failed because darcs' configure file > uses specific flags: It is unlikely it will ever be command-line compatable with ghc. For one thing, ghc does not follow standard command line conventions and jhc tries too, more importantly, their compilation models are pretty different. Jhc does support the {-# JHC_OPTIONS ... #-} pragma though. so if you put both a JHC_OPTIONS and a OPTIONS_GHC at the top of source files then things should work fine. for now, these are equivalent. ghc --make Main.hs -o foo jhc Main.hs -o foo jhc is effectivly always in --make mode. > checking for ghc... /home/bortzmeyer/tmp/jhc/jhc/jhc > checking where GHC keeps its libraries... unrecognized option `--print-libdir' > Usage: jhc [OPTION...] Main.hs > > Or should I ask darcs' maintainer to consider supporting jhc? (It is > an issue I had when trying to maintain autoconf macros for Java: the > language is standard, not the compilers' options.) Unfortunatly, jhc is not yet good enough to compile darcs, darcs uses some ghc extensions and libraries which jhc does not have and is quite a large program. But once jhc is up to snuff, I hope to submit patches to darcs to get it to work with jhc. There has been some talk on the darcs list of getting darcs on platforms ghc doesn't yet support and jhc's portable C output should be ideal for this problem. > > > * It takes ridiculous amounts of memory and CPU. A gigabyte of RAM > > usage is not unheard of. > > Confirmed :-{ After the initial bootstrap of the libraries, future compiles will be much faster. (but slower than ghc still) I recently added support for pre-built libraries so if a machine is not powerful enough to bootstrap, you can just bring a prebuilt prelude.hl from another machine and get going. John -- John Meacham - ?repetae.net?john? From oleg at pobox.com Wed Apr 27 19:17:04 2005 From: oleg at pobox.com (oleg@pobox.com) Date: Wed Apr 27 19:03:06 2005 Subject: [Haskell] Zipper as a delimited continuation Message-ID: <20050427231704.DE8F9ABCC@Adric.metnet.navy.mil> This is the first part of a reply to a query about a zipper with two foci, posted on this list by Oktaviandi Hadi Nugraha on Apr 13. In this part we introduce the framework to answer the question. Our treatment of zipper is quite different from that of Huet (JFP, 1997) and Hinze and Jeuring (JFP 2001). Our zipper is polymorphic over the data structure to traverse, and the zipper creation procedure is generic and does not depend on the data structure at all. Different data structures or different realizations of the same abstract data structure can use the same zipper and the same zipper creation and manipulation functions. Our zipper type depends only on the interface (but not the implementation!) of a traversal function. Our zipper is a derivative of a traversal function rather than that of a data structure itself. Zipper is a construction that lets us replace an item deep in a complex data structure, e.g., a tree or a term, without any mutation. The resulting data structure will share as much of its components with the old structure as possible. The old data structure is still available (which can be handy if we wish to 'undo' the operation later on). Zipper is essentially an `updateable' and yet pure functional cursor into a data structure. Zipper is also a delimited continuation reified as a data structure. In this message, we use delimited continuations directly to derive the zipper. We will be relying on the delimited continuation framework by R. Kent Dybvig, Simon Peyton-Jones and Amr Sabry. Their framework supports shift/reset with multiple prompts and fully polymorphic answertypes. We will be using a slightly modified version of the framework, where the CC monad is a transformer rather than the stand-alone monad. > {-# OPTIONS -fglasgow-exts #-} > module Zipper0 where > > -- Part of the Dybvig, Sabry, Peyton-Jones' library > -- adjusted from being a monad to be a monad transformer > import CC_2CPST > import Control.Monad.Identity > import Control.Monad.Trans We will be using the familiar shift/reset control operators, implemented as follows: > promptP :: Monad m => (Prompt r a -> CC r m a) -> CC r m a > promptP f = do p <- newPrompt; pushPrompt p (f p) > > shiftP :: Monad m => > Prompt r b -> ((CC r m a -> CC r m b) -> CC r m b) -> CC r m a > shiftP p f = letSubCont p $ \sk -> > pushPrompt p (f (\c -> > pushPrompt p (pushSubCont sk c))) We need multiple prompts in the second part to be posted later. The derivation of the zipper starts with a term traversal function. The zipper will be as good and powerful as the traversal function. Let us adopt as a running example the familiar and dear data structure: > data Term = Var String | A Term Term | L String Term > deriving (Eq,Show) In this message, we chose the following function to traverse the lambda-term: > data Direction = Down | DownRight | Up | Next deriving (Eq, Show) > traverse :: (Monad m)=> (Term -> m (Maybe Term, Direction)) -> Term -> m Term > traverse tf term = do > (term', direction) <- tf term > let new_term = maybe term id term' > let select Up t = return t > select Next t@(Var _) = return t > select dir t@(L v t1) | dir == Next || dir == Down > = do > t1' <- traverse tf t1 > return $ L v t1' > select DownRight t@(A t1 t2) = > do > t2' <- traverse tf t2 > return $ A t1 t2' > select dir t@(A t1 t2) | dir == Next || dir == Down > = do > t1' <- traverse tf t1 > t2' <- traverse tf t2 > return $ A t1' t2' > select direction new_term The function `traverse' receives the traversal function `tf' and the lambda-term, and walks and _updates_ the term, as guided by `tf'. The traversal function receives the current subterm and should return a pair. If the first component of a pair is (Just t'), then t' replaces the current subterm. The second component of tf's result is the direction to proceed. The direction Next means proceed in the depth-first order. Other directions may be used to skip some parts of the term and so avoid walking the whole term. The function is written in a monadic style (for an arbitrary monad m). We shall need that later. We will be using the following term as a running example: > -- P2 numeral > term1 = L "f" (L "x" (A (A f (L "f" (A f (L "f" (L "x" x))))) > (A (A f (L "f" (L "x" x))) x))) > where [f,x] = map Var ["f","x"] The first test simply traverses the whole term, makes no alterations and returns the (copy of the) term: > testt1 = runIdentity (traverse (\term -> return (Nothing,Next)) term1) -- *Zipper0> testt1 == term1 -- True To make sure that we really traverse the term, we can print out all the encountered subterms: > testt2 = traverse tf term1 > where tf term = print term >> return (Nothing,Next) We instantiate `traverse' for the IO monad this time. We can skip some parts of the term during the traversal: > testt3 = traverse tf term1 > where > tf term@(A (Var "f") _) = do > print "cutting" >> print term > return (Nothing,Up) > tf term = print term >> return (Nothing,Next) and we can modify the term > testt4 = runIdentity (traverse tf term1) > where tf (L "x" (Var "x")) = return (Just (L "y" (Var "y")),Next) > tf _ = return (Nothing,Next) which indeed returns term1 with all occurrences of (L "x" (Var "x")) replaced with (L "y" (Var "y")). Now we an introduce the zipper: > data Zipper r m term dir = > Zipper term (CC r m (Maybe term, dir) -> CC r m (Zipper r m term dir)) > | ZipDone term It is indeed polymorphic over the term to traverse (as well over the source monad 'm'). We can use this Zipper, as it is, for _any_ data structure that can be traversed by a function that looks like `traverse'. Creating the zipper equally generic: > zip'term :: (Monad (CC r m), Monad m) => > ((term -> CC r m (Maybe term, dir)) -> term -> CC r m term) > -> term -> CC r m (Zipper r m term dir) > zip'term trav term = promptP (\p -> trav (tf p) term >>= (return . ZipDone)) > where tf p term = shiftP p (\k -> return (Zipper term k)) Both Zipper and its creation function depend neither on the representation of the term nor on the traversal strategy. All the information about the data structure and its traversal is encapsulated in one single function `trav'. We can now examine term1, subterm by subterm, using the cursor, zipper, rather than the enumerator, traverse: > zip'through (ZipDone term) = liftIO (print "Done" >> print term) > zip'through (Zipper term k) = do > liftIO $ print term > k (return (Nothing,Next)) >>= zip'through > tz1 :: IO () = runCC (zip'term traverse term1 >>= zip'through) In a sense, we have `inverted' the operation of term traversal. With the cursor, we can keep arbitrary state from one traversal step to another. The cursor provided by zipper is updateable. We can now descend (or walk) to the desired node, replace it, and zip up the result to yield the updated term: > zip'move dir (Zipper term k) = > liftIO (print dir >> print term) >> k (return (Nothing,dir)) > zip'upr (Zipper term k) nt = do > liftIO (print term >> print "replacing with" >> print nt) > k (return (Just nt,Up)) > zip'all'the'way'up (ZipDone term) = return term > zip'all'the'way'up (Zipper term k) = > k (return (Nothing,Up)) >>= zip'all'the'way'up > > tz2 :: IO () > = runCC ( > do > z <- zip'term traverse term1 > z1 <- zip'move Next z > z1 <- zip'move Next z1 > z2@(Zipper (A _ _) k) <- zip'move DownRight z1 > res <- zip'upr z2 (A (Var "x") (Var "x")) >>= zip'all'the'way'up > liftIO $ (print "Result" >> print res) > --zip'through z1 > ) *Zipper0> tz2 Next L "f" (L "x" (A (A (Var "f") (L "f" (A (Var "f") (L "f" (L "x" (Var "x")))))) (A (A (Var "f") (L "f" (L "x" (Var "x")))) (Var "x")))) Next L "x" (A (A (Var "f") (L "f" (A (Var "f") (L "f" (L "x" (Var "x")))))) (A (A (Var "f") (L "f" (L "x" (Var "x")))) (Var "x"))) DownRight A (A (Var "f") (L "f" (A (Var "f") (L "f" (L "x" (Var "x")))))) (A (A (Var "f") (L "f" (L "x" (Var "x")))) (Var "x")) A (A (Var "f") (L "f" (L "x" (Var "x")))) (Var "x") "replacing with" A (Var "x") (Var "x") "Result" L "f" (L "x" (A (A (Var "f") (L "f" (A (Var "f") (L "f" (L "x" (Var "x")))))) (A (Var "x") (Var "x")))) We should point out that we are given an arbitrary number of cursors over the same data structure: for example, in `tz2', the cursor 'z1' is still valid at the end, and still points out to the `third' subterm. The cursor 'z2' is valid as well. All these cursors are isolated: the updates done with the cursor 'z2' and invisible to the cursor 'z1' (as we can see if we uncomment the last statement in tz2). Essentially, each cursor runs in its own transaction. In the second part we will discuss how to make cursors that see the updates of each other. Contrary to the traditional database wisdom, for zippers, it is far harder to implement lower isolation modes than the higher ones. From jmaessen at alum.mit.edu Wed Apr 27 20:03:04 2005 From: jmaessen at alum.mit.edu (Jan-Willem Maessen) Date: Wed Apr 27 19:44:14 2005 Subject: [Haskell] Re: ANNOUNCE: The jhc Haskell compiler. In-Reply-To: <20050427225638.GB1307@momenergy.repetae.net> References: <20050419115442.GJ8142@momenergy.repetae.net> <20050427161453.GA5405@nic.fr> <20050427225638.GB1307@momenergy.repetae.net> Message-ID: <5a9683c3afaff8e57738b4d2ce5121cc@alum.mit.edu> On Apr 27, 2005, at 6:56 PM, John Meacham wrote: > On Wed, Apr 27, 2005 at 06:14:53PM +0200, Stephane Bortzmeyer wrote: >> >>> * It takes ridiculous amounts of memory and CPU. A gigabyte of RAM >>> usage is not unheard of. >> >> Confirmed :-{ > > After the initial bootstrap of the libraries, future compiles will be > much faster. (but slower than ghc still) If jhc itself is built with ghc, I've had good luck with the following wrapper: export JHCPATH=${JHCPATH:-"/path/to/jhc/lib"} /path/to/jhc/jhc +RTS -A1M -M650M -c -RTS $* > I recently added support for pre-built libraries so if a machine is not > powerful enough to bootstrap, you can just bring a prebuilt > prelude.hl from another machine and get going. > > John > > > -- > John Meacham - ?repetae.net?john? > _______________________________________________ > Haskell mailing list > Haskell@haskell.org > http://www.haskell.org/mailman/listinfo/haskell From hcar at haskell.org Thu Apr 28 08:12:31 2005 From: hcar at haskell.org (Andres Loeh) Date: Thu Apr 28 07:53:13 2005 Subject: [Haskell] REMINDER: Contributions to the HC&A Report (May 2005 edition) Message-ID: <20050428121231.GJ30323@cs.uu.nl> Dear Haskellers, the deadline for the May 2005 edition of the Haskell Communities and Activities Report is only a few days away -- but this is still enough time to make sure that the report contains a section on *your* project, on the interesting stuff that you've been doing; using or affecting Haskell in some way. Many projects that have been included in former reports have not yet updated their entries. Please have a look at http://haskell.org/communities/topics.html and at the November 2004 edition for reference. * Has your project been listed in previous Reports, but is not yet updated? Please write a short update! * Are you no longer working on a project that was included in the Report? Write up what you are working on instead, and tell me if someone else has picked up the project. * Is some project you have heard about not included in any previous Report? Please let me know ... There is still time to write a completely new entry, on a new compiler, tool, library, company, user group, idea, ... -- as long as there is a connection to the Haskell language, there is a place for it in the Report! Submissions are due by next Tuesday, that is Tuesday, 03 May 2005. Please mail your entries to , in plain text or pseudo-(La)TeX format. More information can be found in the original Call for Contributions at http://www.haskell.org/pipermail/haskell/2005-April/015688.html I look forward to receiving your contributions. Thanks a lot, Andres (current editor) -- Haskell Communities and Activities Report (http://haskell.org/communities) 05/2005 edition submission deadline: 03 May 2005 From andrew at pimlott.net Thu Apr 28 12:42:12 2005 From: andrew at pimlott.net (Andrew Pimlott) Date: Thu Apr 28 12:23:28 2005 Subject: [Haskell] Re: ANNOUNCE: The jhc Haskell compiler. In-Reply-To: <20050427225638.GB1307@momenergy.repetae.net> References: <20050419115442.GJ8142@momenergy.repetae.net> <20050427161453.GA5405@nic.fr> <20050427225638.GB1307@momenergy.repetae.net> Message-ID: <20050428164212.GJ8680@pimlott.net> On Wed, Apr 27, 2005 at 03:56:38PM -0700, John Meacham wrote: > for now, these are equivalent. > > ghc --make Main.hs -o foo > jhc Main.hs -o foo > > jhc is effectivly always in --make mode. I suggest you make it possible not to operate in --make mode. A build system usually wants to know which targets will be built by a command, but --make makes this hard. This is a significant problem in the java world (where javac always works in something like --make mode). Yes, you can blame it on dumb build tools, but the problem exists. Also, processing only one file is desirable for quick compile tests. Andrew From simons at cryp.to Fri Apr 29 11:07:07 2005 From: simons at cryp.to (Peter Simons) Date: Fri Apr 29 10:52:51 2005 Subject: [Haskell] Cabal problems Message-ID: Hi, I've run into a problem when trying to build a package with Cabal using a different GHC version than the one found in the $PATH. It looks like this: $ runghc Setup.lhs configure --with-compiler=/opt/ghc/bin/ghc-6.2.2 Warning: No license-file field. Configuring hsemail-0.0-2005-02-14... configure: looking for package tool: ghc-pkg near compiler in /opt/ghc/bin/ghc-6.2.2 Cannot find package tool: /opt/ghc/bin/ghc-pkg.2 Apparently there's some problem in the path manipulation code. I also wonder why Cabal complains about a missing License field, because the file contains: License: GPL Last but not least, Cabal fails when the package description file contains comments after the value. The entry Extensions: CPP -- some comment for example, will cause this error: *** Exception: Line 13: Parse of field 'extensions' failed I am using the Cabal version that's shipped with GHC's CVS-HEAD. Peter From kh at dcs.st-and.ac.uk Fri Apr 29 13:10:09 2005 From: kh at dcs.st-and.ac.uk (Kevin Hammond) Date: Fri Apr 29 12:51:31 2005 Subject: [Haskell] [ANNOUNCEMENT]: TFP '05: First Call for Papers Message-ID: [With apologies in advance for any duplication. Kevin] FIRST CALL FOR PAPERS TFP 2005 : Sixth Symposium on Trends in Functional Programming, September 23rd-24th 2005, Tallinn, Estonia (co-located with ICFP 2005 and GPCE 2005). The 2005 Symposium on Trends in Functional Programming (TFP '05) is an international forum for researchers with interests in all aspects of functional programming languages, focusing on providing a broad view of current and future trends in Functional Programming. Previous TFP symposia were held in Munich, Germany in 2004, in Scotland in 2002 and 2003, as successors to the successful series of Scottish Functional Programming Workshops. TFP aims to combine a lively environment for presenting the latest research results with a formal post-symposium refereeing process leading to the publication by Intellect of a high-profile volume containing a selection of the best papers presented at the symposium. A review of a previous TFP proceedings can be found in the July 2003 issue of the Journal of Functional Programming. BEST STUDENT PAPER AWARD TFP traditionally pays special attention to research students, acknowledging that students are almost by definition part of new subject trends. The TFP05 best student paper award (i.e. for the best paper with a student as first author) acknowledges more formally the special attention TFP has for students. The 2004 award was given to Ron van Kesteren for the paper entitled: "Proof Support for General Type Classes". In order to enhance the quality of student submissions, student papers will be given the option of a feedback on their submission to the symposium proceedings. This feedback is intended for authors who are less familiar with a formal publication process and will provide general qualitative feedback on the submission, but will not give a grade or ranking. SCOPE OF THE SYMPOSIUM The Symposium recognises that new trends may arise through various routes. As part of the Symposium's focus on trends we therefore identify the following five categories of paper. High-quality papers are solicited in any of these categories: RESEARCH PAPERS (leading-edge, previously unpublished research work) POSITION PAPERS (on what new trends should or should not be) PROJECT PAPERS (descriptions of recently started new projects) EVALUATION PAPERS (what lessons can be drawn from a finished project) OVERVIEW PAPERS (summarizing work with respect to a trendy subject) Papers must be original, and not submitted for simultaneous publication in any other forum. They may consider any aspect of functional programming: theoretical, implementation- oriented, or more experience-oriented. Also applications of functional programming techniques to other languages may be considered. Papers on the following subject areas are particularly welcome: o functional programming and security o functional programming and mobility o functional programming applied to global computing o functional languages for embedded systems o telecommunications applications in functional languages o functional GRIDs o validation and verification of functional programs o functional languages for reasoning about imperative/object-oriented programs o interoperability with imperative programming languages o dependently typed functional programming o any new emerging trend in the functional programming area If you are in doubt on whether your paper is within the scope of TFP, please contact the TFP05 program chair, Marko van Eekelen, marko@cs.ru.nl. PROCEEDINGS Acceptance to the symposium will be based upon extended abstracts of at least 6 and at most 10 pages. Accepted abstracts are to be completed to full papers for publication in the proceedings that will be available at the symposium in Tallinn. In addition, we intend to continue the TFP tradition of publishing a high-quality subset of contributions in the Intellect series on Trends in Functional Programming. Revised papers will be refereed after the symposium to the normal standards and a subset of the best papers over all categories will be selected for publication by Intellect. This implies (among other things) that: * the paper is written in English. * the paper is well written. * the topic of the paper should be stated clearly. * the submission should clearly indicate to which paper category it belongs: a research, position, project, evaluation or overview paper; it should also indicate whether the paper is a student paper (i.e. first author a student). * for research papers, the approach to solving the problem should be outlined clearly and a detailed discussion of the solution must be given. * the work is properly compared with relevant related work. * there is an abstract, introduction and conclusion. * for research papers, the conclusion should summarise the problem, the solution, and how the work solves the problem. * papers for the symposium proceedings must adhere to the formatting instructions using the tfp.cls style, as will be provided on the TFP05 site; papers must not exceed 16 pages (papers in some categories may comprise considerably less pages). * papers submitted for publication by Intellect must follow formatting and any other instructions provided by the Program Chair. Papers will be judged on their contribution to the research area, with different criteria applying to different categories of paper, as appropriate. SIGNIFICANT DATES Submission of extended abstracts: Friday 8th July 2005 Notification of acceptance: Friday 22th July 2005 Early registration deadline: Friday 29th July 2005 Submission of full papers: Friday 2nd September 2005 Symposium at Tallinn, Estonia: Friday 23rd-Saturday 24th Sept. 2005 Feedback to student papers: Friday 21st October 2005 (provisional) Submission for formal proceedings: Friday 16th December 2005 (provisional) Notification of acceptance: Friday 10th February 2006 (provisional) Camera-ready version: Friday 10th March 2006 (provisional) ORGANISATION Symposium Chair: Kevin Hammond (University of St. Andrews) Program Chair: Marko van Eekelen (Radboud University Nijmegen, NL) Local Organisation: Tarmo Uustalu (Institute of Cybernetics, Tallinn) Treasurer: Greg Michaelson (Heriot-Watt University, Edinburgh) PROGRAM COMMITTEE: Andrew Butterfield, Trinity College Dublin Therese Hardin, Universit? Paris VI Kevin Hammond, St Andrews University John Hughes, Chalmers University Graham Hutton, University of Nottingham Hans-Wolfgang Loidl, Ludwig-Maximilians-University Munich Rita Loogen, Philipps-University Marburg Greg Michaelson, Heriot-Watt University Edinburgh John O'Donnell, University of Glasgow Ricardo Pe?a, Universidad Complutense de Madrid Claus Reinke, Canterbury, UK Sven Bodo Scholz, University of Hertfordshire Doaitse Swierstra, Utrecht University Phil Trinder, Heriot-Watt University Edinburgh Tarmo Uustalu, Institute of Cybernetics, Tallinn (and some other still unconfirmed members) SPONSORS We are actively looking for additional TFP sponsors, who may help to subsidise attendance by research students, for example. If you or your organization might be willing to sponsor TFP, or if you know someone who might be willing to do so, please do not hesitate to contact the Symposium chair: Kevin Hammond. Your students will be grateful! From ashley at semantic.org Sat Apr 30 04:06:38 2005 From: ashley at semantic.org (Ashley Yakeley) Date: Sat Apr 30 03:57:13 2005 Subject: [Haskell] MonadPlus Message-ID: I've added a bit more to . I highly recommend people read it before they start claiming in papers that such-and-such a type "may thus be an instance of MonadPlus". -- Ashley Yakeley, Seattle WA From vivian.mcphail at paradise.net.nz Sat Apr 30 06:09:42 2005 From: vivian.mcphail at paradise.net.nz (Vivian McPhail) Date: Sat Apr 30 05:52:50 2005 Subject: [Haskell] manipulating untyped lambda-calculus in Haskell Message-ID: <001301c54d6c$ba44b980$0301a8c0@intranet> Hi, I am writing a NL parser in Haskell, relying on combinatorial grammar for the syntactic derivation. Each word has an associated syntax and semantics, the semantic term is a lambda expression loaded at run-time using hs-plugins. I : np : :: Sem m a love : s\np : :: Sem m a Predicates in english can have up to 5 arguments, and some of these arguments are functions, so the type of Sem m a is an enumeration of the types that we can build up from (STT m a) and (->). I started by enumerating this by hand: \begin{code} data Monad m => Sem m a = ZSem (SST m a) | USem (SST m a -> SST m a) | BSem (SST m a -> SST m a -> SST m a) | TSem (SST m a -> SST m a -> SST m a -> SST m a) | QSem (SST m a -> SST m a -> SST m a -> SST m a -> SST m a) | FSem (SST m a -> SST m a -> SST m a -> SST m a -> SST m a -> SST) -- | U1Sem ((SST m a -> SST m a) -> SST m a) | B1Sem ((SST m a -> SST m a) -> SST m a -> SST m a) | T1Sem ((SST m a -> SST m a) -> SST m a -> SST m a -> SST m a) \end{code} then what I need is a function to apply these: \begin{code} applySem :: Monad m => Sem m a -> Sem m a -> Sem m a applySem (USem a) (ZSem b) = ZSem $ a b applySem (BSem a) (ZSem b) = USem $ a b applySem (TSem a) (ZSem b) = BSem $ a b applySem (QSem a) (ZSem b) = TSem $ a b applySem (U1Sem a) (USem b) = ZSem # a b applySem (B1Sem a) (USem b) = USem $ a b applySem (T1Sem a) (USem b) = BSem $ a b applySem (T2Sem a) (ZSem b) = B1Sem $ a b applySem (B12Sem a) (USem b) = U1Sem $ a b applySem _ _ = error "application of Semantic functions" \end{code} My typing system ensures that only the correct functions will be applied to each other (the typing system manipulates lambda terms with an additional type (Stc Name (Sem m a)). A complete parse will reduce the lambda terms to closed terms containing only App and Stc, no Var or Lam. I can then use applySem to reduce the term to a single (Sem m a) type, which I can then run. What I have done thus far is enumerate by hand, but for full coverage for 5 argument predicates I need to list 5^5 data constructors and entries in the applySem function. For theoretically complete coverage I would need to enumerate all possible types constructed from (STT m a) and (->). It seems that I must be missing something? Is there a more elegant way of doing this? One can make the observation that the applySem function always applies a function of type (b -> a) to a function of type b to yield a function of type a. I suppose I could write a code generator (in haskell) that enumerates all possible derivations of (STT m a) and (->) but there would still be 5^5 data constructors. Thanks, Vivian McPhail PS Is there something I can do with the Typeable class of hs-plugins? -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org//pipermail/haskell/attachments/20050430/13928a72/attachment.htm From hwloidl at informatik.uni-muenchen.de Fri Apr 29 08:38:26 2005 From: hwloidl at informatik.uni-muenchen.de (Hans-Wolfgang Loidl) Date: Sat Apr 30 08:57:48 2005 Subject: [Haskell] CFP: International Summer School On Applied Semantics 2005 Message-ID: <20050429143826.2ded7d5e.hwloidl@informatik.uni-muenchen.de> 2nd CALL for PARTICIPATION International Summer School On Applied Semantics 2005 Frauenchiemsee, Germany, 8-12 September 2005 http://lionel.tcs.ifi.lmu.de/SummerSchool05/ The International Summer School On Applied Semantics 2005, part of the APPSEM II initiative, will be held on the island of Frauenchiemsee, an island in Lake Chiemsee near Munich, from September 8 to 12, 2005. The summer school provides an opportunity to attend courses on various topics in the area of applied semantics given by leading members of the community. The summer school is organised by the APPSEM II Working Group, and the University of Munich. Immediately after the summer school a workshop on applied semantics will be held at the same location. The summer school is addressed to postgraduate students, researchers and industrials who want to learn about recent developments in programming language research, both in semantic theory and in implementation. LECTURERS Andrew Pitts: Nominal Syntax and Semantics Philippa Gardner: Local Reasoning about Data Update Francois Pottier: A modern eye on ML type inference: old techniques and recent developments Gilles Barthe: Type Checking Dependent Types Chris Hankin: Principles of Program Analysis REGISTRATION AND DATES To register for the Summer School, down-load and fill-in the application form from the Summer School's web page and fax it to: +49 89 2180 9338. The registration fee for the Summer School is 180 Euro, covering attendance of all courses, lecture notes, and meals. Additionally, several options of accomodation, ranging from 25 to 50 Euros per night, are available from the main site of the venue. ?Deadline for Registration: 1 July 2005 Notification for Grants: 15 July 2005 Summer School: 8-12 September 2005 A limited number of student grants is available. To apply for a grant, fill-in the corresponding section in the above form, too. LOCATION The International Summer School On Applied Semantics 2005 will be held in Frauenchiemsee, an island in Lake Chiemsee, on the border between Germany and Austria, about 100kms in the south east of the Munich Airport or about 70 km in the west of Salzburg Airport. ORGANISING COMMITTEE Prof Martin Hofmann Dr Hans-Wolfgang Loidl Sigrid Roden Konstantin Kutzkow CONTACT Sigrid Roden, Ludwig-Maximilians-Universitaet Muenchen, Institut fuer Informatik, Theoretische Informatik, Oettingenstrasse 67 D 80538 Muenchen GERMANY Fax: +49 89 2180 9337 Tel: +49 89 2180 9338 From jespera at diku.dk Sat Apr 30 06:58:16 2005 From: jespera at diku.dk (Jesper Andersen) Date: Sat Apr 30 08:57:50 2005 Subject: [Haskell] Reminder: PAT2005 Summer School Message-ID: <20050430105816.A522B61DDD@tyr.diku.dk> ======== REMINDER of PAT2005 ======== Dates have changed: REGISTRATION is OPEN NOW Fee Waiver applications: 8. May Registration closes 20. May Summer School: Program analysis and transformation Organized by: Computer Science Department (DIKU), University of Copenhagen, Denmark Monday-Friday 6-10 June, 2005 Summer School homepage: http://www.diku.dk/PAT2005/ This summer school on Program analysis and transformation will span theory and practice in the field. The overall theme is semantics-based program manipulation, in which practically-motivated operations on programs are solidly based in the semantics of the underlying programming languages. Research profile of the Summer School's topics: This research field began with classical compiler optimisations. These were pragmatically successful and well-automated, but lacking in semantic foundations. This led to the long-pursued goal of truly semantics-based generation of compilers and of abstract machines to implement programming languages. Parallel academic developments included more powerful and interesting program transformations that were developed by hand, one at a time. Major progress has been made in all three areas: semantically well-founded compiler optimisations have been devised and well-automated; compilers and abstract machines can now be generated by semantics-based methods including partial evaluation; and there now exist more powerful, general and well-founded program transformations. The speakers at this Summer School represent the state of the art in this research field. Confirmed speakers and their topics are: Mooly Sagiv (Israel: Tel Aviv) Program analysis using Three-Valued Logic Olivier Danvy (Denmark: Aarhus) On one-step reduction, evaluation, and abstract machines Oege De Moor (UK: Oxford) Incremental execution of transformation specifications Nick Benton, Microsoft Research Cambridge Semantics of static analyses and program transformations Neil Jones (Denmark: DIKU, Copenhagen) Size-change termination analysis of first and higher-order programs Torben Mogensen (Denmark: DIKU, Copenhagen) Introduction to partial evaluation; Program semi-inversion Arne Glenstrup (Denmark: ITU, Copenhagen) Tool tutorial for the Scheme partial evaluators PGG and Similix John Gallagher (Denmark: Roskilde) Program analysis and specialisation using tree automata Robert Glueck (Denmark: DIKU, Copenhagen) Program inversion Kazuhiko Kakehi (Japan: MIST, Tokyo Uniiversity) Attribute grammars and program transformations Prerequisites: Students should have some familiarity with classical compiler optimisations. A basic knowledge of operational semantics of programming languages (eg Structural operational semantics, Natural semantics or Action semantics) would be helpful. Sponsors: The PAT Summer School is partly supported by FIRST Graduate School: http://first.dk/ APPSEM-II: http://www.tcs.informatik.uni-muenchen.de/~mhofmann/appsem2/ Microsoft Research: http://research.microsoft.com/aboutmsr/labs/ Danish Natural Science Research Agency: http://www.forsk.dk Web pages: PAT home page: http://www.diku.dk/PAT2005/ (with details on lecture topics, speaker profiles, timetable, etc.) DIKU guest page: http://www.diku.dk/diku/gaester/index.html (with details on local transport, maps, hotels, etc.) Registration: The registration fee is DKK 1100 = EURO 150. This includes lecture materials, lunches and coffees, and a Summer School dinner. A block of rooms will be reserved at a hotel in central Copenhagen -- specifically, the new Cab Inn. Attendees are expected to arrange and pay for their own travel and lodging. Registration will Open: 5. April, 2005 Close: 20. May, 2005. Fee waivers: There will be a limited number of grants covering part or all of the registration fee. Application materials are available at the course's web page at the beginning of the registration period. Local Organisation Committee: Neil Jones neil(a)diku.dk Andrzej Filinski andrzej(a)diku.dk Torben Mogensen torbenm(a)diku.dk Jesper Andersen jespera(a)diku.dk Karin Outzen karino(a)diku.dk From cfp2005 at micai.org Wed Apr 27 22:04:46 2005 From: cfp2005 at micai.org (Alexander Gelbukh (MICAI)) Date: Sat Apr 30 08:57:51 2005 Subject: [Haskell] CFP: MICAI-2005 Artificial Intelligence, Springer LNAI: submission reminder and CFP-2 Message-ID: MICAI 2005 4th Mexican International Conference on ARTIFICIAL INTELLIGENCE November 14-18, 2005 Monterrey, Mexico www.MICAI.org/2005 Proceedings: Springer LNAI. Submission: May 29 (abstract May 22). Keynote speakers: see website. SECOND CALL FOR PAPERS *** WHAT'S NEW *** - Submission is now open. We strongly encourage you to register your abstract right now, as expression of interest (you can upload the full paper later). - Collocated workshops: Natural Language Understanding and Intelligent Information Access; others to be announced. *** GENERAL INFORMATION *** MICAI is a high-level international conference covering all areas of Artificial Intelligence. Acceptance rate of MICAI-2004 was 38% of submissions from 19 countries. See www.MICAI.org for more info. *** PAPER SUBMISSION *** All accepted papers will be published by Springer-Verlag in their Lecture Notes in Artificial Intelligence (LNAI). Authors are invited to submit original previously unpublished research papers, in English, up to 10 pages, strictly following the LNCS/LNAI format guidelines. Submissions are received through the website, see www.MICAI.org/2005. The title and abstract must be submitted by May 22, then the full paper by May 29. All submissions will be subject to blind peer review by three program committee members. *** IMPORTANT DATES *** May 22: Paper registration deadline (title and abstract required). May 29: Paper submission deadline (only papers registered by May 22). July 17: Acceptance notification. August 7: Camera-ready deadline. *** TOPICS *** Topics of interest are all areas of Artificial Intelligence, including but not limited to: - Expert Systems / KBS - Multiagent systems and Distributed AI - Knowledge Management - Intelligent Interfaces: Multimedia, Virtual Reality - Natural Language Processing / Understanding - Computer Vision - Neural Networks - Genetic Algorithms - Fuzzy logic - Belief Revision - Machine Learning - Intelligent Tutoring Systems - Data Mining - Knowledge Acquisition - Knowledge Representation - Knowledge Verification, Sharing and Reuse - Ontologies - Qualitative Reasoning - Model-Based Reasoning - Constraint Programming - Common Sense Reasoning - Case-Based Reasoning - Nonmonotonic Reasoning - Spatial and Temporal Reasoning - Robotics - Planning and Scheduling - Navigation - Assembly - Hybrid Intelligent Systems - Logic Programming - Automated Theorem Proving - Intelligent Organizations - Uncertainty / Probabilistic Reasoning - Philosophical and Methodological Issues of AI *** CONFERENCE ORGANIZATION *** Conference Chairs: Alvaro de Albornoz, Angel Kuri. Program Chairs: Alexander Gelbukh, Raul Monroy. Tutorial Chairs: Manuel Valenzuela, Horacio Martinez. Workshop Chairs: Ramon Brena, Jose Luis Aguirre. Keynote Talks Coordinator: Carlos Alberto Reyes. Local Chair: Hugo Terashima. Local Steering Committee: Rogelio Soto, Ricardo Swain. *** CONTACT *** General inquiries: micai2005 at MICAI dot org. Inquiries on submission requirements: submission at MICAI dot org. Inquiries on the conference program: program at MICAI dot org. See more contact options on www.MICAI.org/2005. We apology if you receive this CFP more than once. PLEASE CIRCULATE this CFP among your students and colleagues. ------------------------------------------------------------------------ This e-mail was delivered to you by event@in.tu-clausthal.de, what is a moderated list runned by Computational Intelligence Group of Technical University of Clausthal, Germany. All event announcements sent through this list are also listed in our conference planner at http://cig.in.tu-clausthal.de/index.php?id=planner. In the case of any requests, questions, or comments, do not hesitate and contact event-owner@in.tu-clausthal.de ASAP. ****************************************************** * CIG does not take any responsibility for validity * * of content of messages sent through this list. * ****************************************************** Computational Intelligence Group Institute of Informatics Technical University Clausthal Germany http://cig.in.tu-clausthal.de/ From carette at mcmaster.ca Sat Apr 30 09:51:59 2005 From: carette at mcmaster.ca (Jacques Carette) Date: Sat Apr 30 09:33:06 2005 Subject: [Haskell] MonadPlus In-Reply-To: Message-ID: Ashley Yakeley wrote: > I've added a bit more to . > > I highly recommend people read it before they start claiming in papers > that such-and-such a type "may thus be an instance of MonadPlus". Very nice. One of the problems I have encountered with MonadPlus is that too many people try to force it to be a Monoid, when it doesn't always want to be. Your suggestion of separating out the identity operation from the binary operation makes it much clearer that these various Monads are actually instances of Magma(s) http://en.wikipedia.org/wiki/Magma_%28algebra%29 than necessarily a Monoid. On the above Wikipedia article, there is a useful ontology of identities that can be useful to describe various Magmas. Jacques PS: your discussion of the laws of MonadPlus reinforces to me the real need for being able to declare the laws that a typeclass should satisfy, not just the signature. From jmaessen at alum.mit.edu Sat Apr 30 12:33:01 2005 From: jmaessen at alum.mit.edu (Jan-Willem Maessen) Date: Sat Apr 30 12:14:08 2005 Subject: [Haskell] MonadPlus In-Reply-To: References: Message-ID: <4f386ed173562cddfbf16258f3b57a37@alum.mit.edu> On Apr 30, 2005, at 9:51 AM, Jacques Carette wrote: > Ashley Yakeley wrote: >> I've added a bit more to . >> I highly recommend people read it before they start claiming in >> papers that such-and-such a type "may thus be an instance of >> MonadPlus". > > Very nice. > > One of the problems I have encountered with MonadPlus is that too many > people try to force it to be a Monoid, when it doesn't always want to > be. Your suggestion of separating out the identity operation from the > binary operation makes it much clearer that these various Monads are > actually instances of Magma(s) > http://en.wikipedia.org/wiki/Magma_%28algebra%29 > than necessarily a Monoid. And the binary operation in a Magma has *no* properties. My feeling is that there MonadPlus must have *some* set of properties in order to be useful---otherwise it's just an ad-hoc mechanism to call a pile of different binary operations "mplus". I think most people would agree that's undesiriable, and the only confusion is which properties must hold. I claim "monoid" is a point of agreement, at least. > On the above Wikipedia article, there is a useful ontology of > identities that can be useful to describe various Magmas. And points up the sheer complexity of the hierarchy that would result if we tried to slice it into minimal orthogonal pieces (even if we immediately reject, say, division as uninteresting). The focus must be on identifying the properties that really matter, encoding those, and rejecting those which merely add unnecessary complexity. > > Jacques > > PS: your discussion of the laws of MonadPlus reinforces to me the real > need for being able to declare the laws that a typeclass should > satisfy, not just the signature. On this I cannot but agree. But we don't usually count on being able to prove these by construction. -Jan-Willem Maessen From carette at mcmaster.ca Sat Apr 30 13:44:06 2005 From: carette at mcmaster.ca (Jacques Carette) Date: Sat Apr 30 13:25:14 2005 Subject: [Haskell] MonadPlus In-Reply-To: <4f386ed173562cddfbf16258f3b57a37@alum.mit.edu> Message-ID: Jan-Willem Maessen wrote: > > ...discussion of the laws of MonadPlus reinforces to me the real > > need for being able to declare the laws that a typeclass should > > satisfy, not just the signature. > > On this I cannot but agree. But we don't usually count on being able to prove these by construction. Note that I was just suggesting that the laws be given and available (ie as type-level constructs, not comments). I was not suggesting that 'proofs' be either done by the compiler, nor even given as necessary annotations. Although if they were present (as annotations), the proof itself might furnish some additional ingredients that an advanced optimizer might be able to use to good effect... Jacques From ccshan at post.harvard.edu Sat Apr 30 15:13:38 2005 From: ccshan at post.harvard.edu (Chung-chieh Shan) Date: Sat Apr 30 15:08:28 2005 Subject: [Haskell] Re: manipulating untyped lambda-calculus in Haskell References: <001301c54d6c$ba44b980$0301a8c0@intranet> Message-ID: <202dk2-7dt.ln1@ligate.eecs.harvard.edu> Vivian McPhail wrote in article <001301c54d6c$ba44b980$0301a8c0@intranet> in gmane.comp.lang.haskell.general: > It seems that I must be missing something? Is there a more elegant > way of doing this? Check out the "generalized algebraic data types" feature (GADT, one of its many names), now available in GHC. One classical example of its use is to write type-safe interpreters similar to your NL parser. -- Edit this signature at http://www.digitas.harvard.edu/cgi-bin/ken/sig Science operates according to a law of conservation of difficulty. The simplest questions have the hardest answers; to get an easier answer, you need to ask a more complicated question. -- George Musser. Color Madness. Oddball maps can require more than four colors. Sci. Am., January 2003. From ashley at semantic.org Sat Apr 30 17:33:44 2005 From: ashley at semantic.org (Ashley Yakeley) Date: Sat Apr 30 17:15:25 2005 Subject: [Haskell] Re: MonadPlus References: <4f386ed173562cddfbf16258f3b57a37@alum.mit.edu> Message-ID: In article <4f386ed173562cddfbf16258f3b57a37@alum.mit.edu>, Jan-Willem Maessen wrote: > And the binary operation in a Magma has *no* properties. My feeling is > that there MonadPlus must have *some* set of properties in order to be > useful---otherwise it's just an ad-hoc mechanism to call a pile of > different binary operations "mplus". I think most people would agree > that's undesiriable, and the only confusion is which properties must > hold. > > I claim "monoid" is a point of agreement, at least. I think Left Zero is too. I'd be very interested in what people feel constitutes a real MonadPlus: my own preference is Monoid, Left Zero, and Left Distribution. -- Ashley Yakeley, Seattle WA From shae at ScannedInAvian.com Sat Apr 30 12:59:06 2005 From: shae at ScannedInAvian.com (Shae Matijs Erisson) Date: Sun May 1 17:21:26 2005 Subject: [Haskell] QuickCheck typeclass properties was Re: MonadPlus References: <4f386ed173562cddfbf16258f3b57a37@alum.mit.edu> Message-ID: <87d5scjj51.fsf_-_@thunderbird.scannedinavian.com> Jan-Willem Maessen writes: >> PS: your discussion of the laws of MonadPlus reinforces to me the real need >> for being able to declare the laws that a typeclass should satisfy, not just >> the signature. > On this I cannot but agree. But we don't usually count on being able to prove these by construction. Still, including QuickCheck tests for typeclass laws would be nice. For example, QuickCheck.Utils has isAssociative, isCommutable, isTotalOrder. http://www.haskell.org/ghc/docs/latest/html/libraries/QuickCheck/Test.QuickCheck.Utils.html -- Programming is the Magic Executable Fridge Poetry, | www.ScannedInAvian.com It is machines made of thought, fueled by ideas. | -- Shae Matijs Erisson