Difference between revisions of "WxHaskell"

From HaskellWiki
Jump to: navigation, search
(See also: Added several links)
(External links: Updated link for "wxHaskell - A Portable and Concise GUI Library for Haskell")
Line 77: Line 77:
== External links ==
== External links ==
* Daan Leijen: [http://legacy.cs.uu.nl/daan/download/papers/wxhaskell.pdf wxHaskell / A Portable and Concise GUI Library for Haskell] (pdf)
* Daan Leijen: [[media:wxhaskell.pdf | wxHaskell - A Portable and Concise GUI Library for Haskell]]
* Wei Tan: [http://www.cse.unsw.edu.au/~cs4132/lecture/wlta543.pdf GUI programming with wxHaskell] (pdf)
* Wei Tan: [http://www.cse.unsw.edu.au/~cs4132/lecture/wlta543.pdf GUI programming with wxHaskell] (pdf)
* [http://www.cse.chalmers.se/edu/course/afp/lab1.html Assignment 1] part of the course [http://www.cse.chalmers.se/edu/course/afp/index.html Advanced Functional Programming], by [http://www.cse.chalmers.se/~koen/ Koen Lindström Claessen] and [http://www.cse.chalmers.se/alumni/bringert/ Björn Bringert], a portal like page (html)
* [http://www.cse.chalmers.se/edu/course/afp/lab1.html Assignment 1] part of the course [http://www.cse.chalmers.se/edu/course/afp/index.html Advanced Functional Programming], by [http://www.cse.chalmers.se/~koen/ Koen Lindström Claessen] and [http://www.cse.chalmers.se/alumni/bringert/ Björn Bringert], a portal like page (html)

Revision as of 20:30, 16 December 2014


What is it?

wxHaskell is a portable and native GUI library for Haskell. The goal of the project is to provide an industrial strength GUI library for Haskell, but without the burden of developing (and maintaining) one ourselves.

wxHaskell is therefore built on top of wxWidgets – a comprehensive C++ library that is portable across all major GUI platforms; including GTK, Windows, X11, and MacOS X. Furthermore, it is a mature library (in development since 1992) that supports a wide range of widgets with the native look-and-feel.

We maintain two branches of wxHaskell.

The 0.13 branch supports wxWidgets 2.8.x, and is the easiest to get working. Many Linux distributions come with packaged wxWidgets 2.8.x, and Windows users can download the pre-built wxPack distribution. This branch is in a maintenance mode, and will not receive significant new development.

The 0.90 branch supports wxWidgets 2.9.x. The downside of choosing this version is that you will likely need to build wxWidgets for yourself, which is slightly time consuming and requires you to have g++ installed on your system. The benefit is that it supports quite a number of new and more modern GUI elements. wxHaskell 0.90 is essential if you want to build for 64bit MacOS X targets (e.g. Lion).


The core interface of wxHaskell was originally derived from the wxEiffel binding. Work on this has been dormant for several years, but the wxHaskell maintainers now support updates to the wxWidgets API themselves.

There are four key components of wxHaskell from version 0.90 onwards (three in earlier branches).

  • wxdirect parses specially written C headers and generates low level Haskell FFI bindings for the exported functions.
  • wxc is a C language binding for wxWidgets. It is needed because the Haskell FFI can only bind to C as it does not understand C++ name mangling. Because it is a C language wrapper over wxWidgets, and is generated as a standard dynamic library on all supported platforms, wxc could be used as the basis for a wxWidgets wrapper for any language which supports linking to C (so that would be all of them then). In older versions of wxHaskell, the wxc components were built as a monolithic static library with wxcore.
  • wxcore is a set of low-level Haskell bindings to wxc. A large part is generated automatically by wxdirect, with some key abstractions being hand-coded in Haskell. You can program directly to the wxcore interface if you wish (it is sometimes the only way, in fact).
  • wx is a set of higher-level wrappers over wxcore. It is intended to make it easier to write reasonably idiomatic Haskell. Most wxHaskell software is about 80% wx and 20% wxcore.

The C wrapper is, unfortunately, generated by hand, so there is some (mainly tedious boilerplate) work involved in porting a new set of widgets to wxHaskell. Some work has been done into automating this aspect, but we are far from being able to replicate the approach reliably over then entire API as yet.

From the perspective of the user (rather than the developer) about 90% of the core wxWidgets functionality is already supported, excluding more "exotic" widgets like dockable windows. The library supports Windows, GTK (Linux) and MacOS X.


12 August 2014
wxHaskell 0.91.0 is released. This version accepts wxWidgets 2.9 and 3.0.
21 March 2014
wxHaskell 0.90.1 is released.
2 August 2013
A github organisation 'wxHaskell' has been created, the maintenance repo (https://github.com/atzedijkstra/wxHaskell) has moved to https://github.com/wxHaskell/wxHaskell. It is the intent to soon release a maintenance update working with wxWidgets 2.9.5 and GHC 7.6.x
26 January 2013
Maintenance is now done on the repository at: https://github.com/atzedijkstra/wxHaskell
10 June 2012
Repository now on GitHub: https://github.com/jodonoghue/wxHaskell
13 April 2012
wxHaskell 0.90 is released. This version supports wxWidgets >= 2.9.x, and includes many new features.

See also Old wxHaskell news



External links

See also