Snap: A Really Fast Haskell Web Framework

The new Snap web framework for Haskell is now packaged for Arch Linux.

You can install it automagically with, e.g.:

$ sudo bauerbill
            --trusted-users arch-haskell
            --build-as $USER
            -S haskell-snap-server

And dive into the quick start:

$ cd /tmp
$ mkdir site
$ cd site
$ snap init
$ cabal install
$ site 8000

Then visit http://localhost:8000/ to serve up your new web project.

Arch Haskell News: February 2010

Hackage now has 1851 Haskell packages, of which 1541 (84%) have been natively packaged for Arch in AUR. All these packages are available via AUR, using the “bauerbill” tool (or other full-resolving package tool for Arch).

You can find the status of all Haskell packages in Arch here, regularly updated using the archlinux Haskell package tools.

Since the GHC 6.12 upgrade, there have been some major package updates:

Most things are now ready for GHC 6.12, with the notable exception of packages that:

  • depend on gtk2hs (not yet released for GHC 6.12)
  • parsec < 3 (Arch will be downgrading to parsec 2 to be HP compliant).

Arch Linux Updates to GHC 6.12

We’ve (mostly) completed the major upgrade of Haskell packages on Arch Linux to use GHC 6.12. The summary:

  • We updated to GHC 6.12
  • Most things are working.
  • You can’t use “yaourt” any more — it is broken on Haskell dependencies.

There are several consequences of this upgrade for Arch Haskell users, so read on for the full stories.

Changes to GHC

Firstly, GHC has been improved in many ways:

  • Parallel execution performance is better (for your multicore Haskell apps)
  • Dynamic linking of Haskell libraries is supported (see this tutorial).
  • Package management is far more robust and scalable (you’ll see improvements in install times if you use many packages).
  • And of course, many tweaks and new features in the language and base libraries.

To upgrade we recommend you completely clean your existing Haskell Arch packages, via:

sudo pacman -c –remove ghc

to do a recursive removal of all packages, then install ghc in a clean state:

sudo pacman -S ghc

Changes to Extra / Community Packages

With the GHC 6.12 update, GHC no longer distributes a number of libraries that it used to, including:

All these packages are now in the (Extra) repository, and make up the bulk of the support for the Haskell platform in (Extra). You can find them with pacman.

Major Applications: xmonad, darcs, …

The major applications have all been updated, and you should have no trouble upgrading to the versions in (Extra) and (Community).

For example, xmonad:

  1. upgrade ghc with pacman
  2. install xmonad and xmonad-contrib with pacman

and you’ll be good to go.

“Provides” packages: Do not use Yaourt!

A consequence of moving these packages out of the ghc package is that almost all Haskell packages had missing dependencies. Previously, if a Haskell package had used say, transactional memory, it only had to depend on “ghc” in its specification. That is no longer the case, and to solve this problem of dependencies moving around once and for all we have enacted the following policy for Haskell packages:

We have updated all packages in AUR to list explicit dependencies. So now you will see things like this, for the latest haddock.

  • Dependencies: haskell-array haskell-cabal haskell-containers haskell-directory …

So even the libraries distributed with GHC are explicitly listed. This has major consequences for which package builder tool you use!

To build Haskell libraries and programs, the package tool must support the “provides” field. yaourt does NOT support “provides. You need to use a different package tool

We’ve put together a list of preferred package tools here, and I (dons) have switched to bauerbill, which is fast, and has full support for more complicated package specifications. You use it exactly as for yaourt, but without the bugs:

     sudo bauerbill --no-color --aur -S haskell-csv

The Haskell packaging tool for Arch, cabal2arch, has been fully updated to support the new “provides” policy, and in turn has been used to update all 1500+ Haskell packages in AUR.

If you have any dependency resolution problems, make sure you are not using yaourt.

Version changes

We’re moving towards full support of the next Haskell Platform release in binary form from (Extra). To get there we decided to upgrade to QuickCheck 2. This means that some packages that haven’t yet migrated to QuickCheck 2 will be temporarily unavailable from AUR (including HDBC).

gkt2hs and wxHaskell are also not yet supporting GHC 6.12. They upstream maintainers are aware, and these packages will be updated once upstream is ready.

AUR Packages

AUR now carries 1500+ Haskell packages, and all have been updated to the new provides syntax. You can track the last known build/version status of these packages here.

Get in touch!

You can join in the community for Haskell users on Arch, via:

wxHaskell packaged for Arch

wxHaskell, the venerable portable and native GUI library for Haskell, is now packaged for Arch, in the following packages:

Which you can install with yaourt:

  yaourt –aur -S haskell-wxcore haskell-wx

And is already used by a number of graphical Haskell programs and libraries:

all packaged.

happstack 0.4: A scalable framework for developing web applications in Haskell

Happstack is the Haskell Application Server Stack. It is a scalable framework for developing web applications, similar in purpose to Django, RoR, Turbogears, Grails, Seaside. happstack powers and and you can use it to beat the Arc Challenge. The latest release of happstack is now available in Arch, via AUR, and features a built-in HTTP server, built-in persistant data store, many ways to do templating, a rich EDSL for designing requests and responses, and easy integration with an external database, or webserver.

All the packages are here:

To get started with happstack, you can work through Real World Happstack.

Arch Haskell News: September 12 2009

Hackage now has 1540 (+97) Haskell packages, of which 1342 (+76) (87.2%) have been natively packaged for Arch in AUR. All these packages are available via AUR, using the “yaourt” tool.

You can find the status of all Haskell packages in Arch here, regularly updated using the archlinux Haskell package tools.

Automated Package Tracking for Arch Haskell

It’s a lot of work managing the Haskell packages for Arch Linux. We use the principle of automating all parts of the packaging process, and rely on cabal to give us good metadata about our packages. However, over time we end up with packages generated for Arch using old versions of tools, or gaps in coverage.

In order to ensure consistent, high quality packages, we’ve been building a programmatic interface to AUR and Hackage, to automate checking of package sanity.

You can find:

With the new AUR package linter tool it should be easier to ensure all those Haskell packages are building and working as desired.

Atom : a domain specific language for hard realtime applications

Atom 0.1.0 has just been released by Tom Hawkins.

Atom is an open source language, embedded in Haskell, for writing embedded real-time software. It was originally designed and deployed at Eaton Corporation to improve development times and ease of verification of hydraulic hybrid systems in buses and trucks. It has been open sourced, and is starting to be used for other embedded systems programming tasks.

Atom uses ideas from conditional term rewriting to compile atomic transition rules into C code with guarantees of constant memory use and execution time.

The productivity benefits were impressive from April 2009:

  • 5K lines of Haskell/atom replaced 120K lines of matlab, simulink,
    and visual basic.
  • 2 months to port simulink design to atom. – 3K lines of atom generates 22K lines of embedded C.
  • Rules with execution periods from 1ms to 10s all scheduled at
    compile time to a 1 ms main loop.
  • Atom design clears electronic/sw testing on first pass.
  • Currently in vehicle testing with no major issues.

Atom compiles Haskell source to C (so you can use it for writing regular old C programs). Here’s an example Atom kernel by Lee Pike:

atom "computeFib" $ do
  cond $ value runFib
  cond $ value i >. 0
  decr i
  snd <== (value fst) + (value snd)
  fst <== value snd

Examples are included in the Atom source.

It is available for Arch Linux:

Resources for Atom Programming

Arch Haskell News: July 25 2009

Hackage now has 1443 (+48) Haskell packages, of which 1266 (+44) (87.7%) have been natively packaged for Arch in AUR. All these packages are available via AUR, using the “yaourt” tool.

Read the full list of updates.

Notable Updates

There were some quite significant new apps, and libraries this month.

bloxorz: an OpenGL Logic Game written in Haskell

Bloxorz is a fun OpenGL-based logic game written in Haskell. On a 2 dimensional board, your goal is to flip the block until it reaches the hole.  Here’s a demo:

You can play with it on Arch Linux via:

    $ yaourt bloxorz

On other systems

    $ cabal install bloxorz

A background to the project is written up here.