Personal tools

WxHaskell

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
m (What is it?: wxHaskell is no longer on SourceForge)
(Changed http to https, to satisfy the link checker)
 
(23 intermediate revisions by 2 users not shown)
Line 9: Line 9:
 
maintaining) one ourselves.
 
maintaining) one ourselves.
  
wxHaskell is therefore built on top of [http://www.wxwidgets.org 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, and it has a very active community.
+
wxHaskell is therefore built on top of [http://www.wxwidgets.org 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.
 
We maintain two branches of wxHaskell.
Line 15: Line 15:
 
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 [http://wxpack.sourceforge.net wxPack] distribution. This branch is in a maintenance mode, and will not receive significant new development.
 
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 [http://wxpack.sourceforge.net 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 0.9x branch supports wxWidgets 2.9 and 3.0. For wxWidgets 3.0, Windows users can easily install wxWidgets together with wxHaskell, using a [https://sourceforge.net/projects/wxhaskell/files/wxInstall/ wxInstall package]. The benefit of wxWidgets 3.0 is that it supports quite a number of new and more modern GUI elements. ''wxHaskell 0.9x is essential if you want to build for 64 bit MacOS X targets (e.g. Lion)''.
  
 
== Status ==
 
== Status ==
  
The core interface of wxHaskell was originally derived from the [http://elj.sourceforge.net/projects/gui/ewxw/ wxEiffel] binding. Work on this has been dormant for several years, but the wxHaskell maintainers now support updates to the wxWidgets API themselves - we generally respond to new releases of wxWidgets within a few weeks at most.
+
The core interface of wxHaskell was originally derived from the [http://elj.sourceforge.net/projects/gui/ewxw/ 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).
 
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.
+
* 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.
 
* 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).
 
* 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 (at least in my experience).
+
* 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.
 
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.
Line 33: Line 33:
 
== News ==
 
== News ==
  
; 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
+
; 30 December 2015: wxInstall Achelanne 0.1 and wxHaskell 0.92.2 are released.
; 26 January 2013: Maintenance is now done on the repository at: https://github.com/atzedijkstra/wxHaskell
+
; 9 October 2015: wxInstall Abriline packages and wxHaskell 0.92.1 are released.
; 10 June 2012: Repository now on GitHub: https://github.com/jodonoghue/wxHaskell
+
; 27 August 2015: wxHaskell 0.92.0 is released.
; 13 April 2012: wxHaskell 0.90 is released. This version supports wxWidgets >= 2.9.x, and includes many new features.
+
; 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.
  
 
See also [[wxHaskell/Old wxHaskell news | Old wxHaskell news]]
 
See also [[wxHaskell/Old wxHaskell news | Old wxHaskell news]]
Line 43: Line 44:
  
 
* [http://wxhaskell.sourceforge.net/screenshots.html Screenshots]
 
* [http://wxhaskell.sourceforge.net/screenshots.html Screenshots]
** [http://wxhaskell.sourceforge.net/samples.html Samples] ( the links to the source code on that page are broken, but you can see the sources  [http://code.haskell.org/wxhaskell/samples/ here] )
+
** [http://wxhaskell.sourceforge.net/samples.html Samples] ( the links to the source code on that page are broken, but you can see the sources  [https://github.com/wxHaskell/wxHaskell/tree/master/samples here] )
 
** [http://wxhaskell.sourceforge.net/applications.html Applications]
 
** [http://wxhaskell.sourceforge.net/applications.html Applications]
 
* [[/Documentation/|Using wxHaskell]]
 
* [[/Documentation/|Using wxHaskell]]
Line 51: Line 52:
 
** [[/Short guide/]]
 
** [[/Short guide/]]
 
** [[/Tips and tricks/]]
 
** [[/Tips and tricks/]]
** [http://hackage.haskell.org/packages/archive/wx/latest/doc/html/doc-index.html Index] of the wx API documentation
+
** [https://hackage.haskell.org/package/wx/docs/doc-index.html Index] of the wx API documentation
** [http://hackage.haskell.org/packages/archive/wxcore/latest/doc/html/doc-index.html Index] of the wxcore API documentation
+
** [https://hackage.haskell.org/package/wxcore-0.92.0.0/docs/doc-index.html Index] of the wxcore API documentation
 +
** [[WxHaskell/Hierarchy | The hierarchy of the C++ classes of wxWidgets, as mapped in wxHaskell]]
 
* [[/Download/]]
 
* [[/Download/]]
 
* Building and installing. Please refer to your platform.
 
* Building and installing. Please refer to your platform.
Line 61: Line 63:
 
*** [[/2.8/|wxWidgets 2.8.x]]
 
*** [[/2.8/|wxWidgets 2.8.x]]
 
*** [[/0.13/|wxHaskell 0.13 for wxWidgets 2.8.x]]
 
*** [[/0.13/|wxHaskell 0.13 for wxWidgets 2.8.x]]
*** [[/0.90/|wxHaskell 0.90 for wxWidgets 2.9.x]]
 
 
*** [[WxHaskell/Building]]
 
*** [[WxHaskell/Building]]
 
*[[/Development/]]
 
*[[/Development/]]
** [[/Development/Environment |Working on wxHaskell]]
+
** [[/Development/Environment | Working on wxHaskell]]
 +
** [[/Development/Debugging  | Debugging]]
 
*[[/Contribute/]]
 
*[[/Contribute/]]
  
 
== Resources ==
 
== Resources ==
 
* [http://sourceforge.net/p/wxhaskell/_list/tickets Tickets for bugs and feature requests]  
 
* [http://sourceforge.net/p/wxhaskell/_list/tickets Tickets for bugs and feature requests]  
* [https://lists.sourceforge.net/lists/listinfo/wxhaskell-devel The developer mailing list (wxhaskell-devel)] [http://sourceforge.net/mailarchive/forum.php?forum_name=wxhaskell-devel (archive)]
+
* [https://lists.sourceforge.net/lists/listinfo/wxhaskell-devel The developer mailing list (wxhaskell-devel)] [http://sourceforge.net/p/wxhaskell/mailman/wxhaskell-devel/ (archive)]
* [https://lists.sourceforge.net/lists/listinfo/wxhaskell-users The wxHaskell users mailing list (wxhaskell-users)] [http://sourceforge.net/mailarchive/forum.php?forum_name=wxhaskell-users (archive)]
+
* [http://sourceforge.net/p/wxhaskell/mailman/wxhaskell-users/ The wxHaskell users mailing list (wxhaskell-users)] [http://sourceforge.net/p/wxhaskell/mailman/wxhaskell-users/ (archive)]
* [https://github.com/wxHaskell/wxHaskell wxHaskell repository], as of 2 Aug 2013 replacing the old repo [https://github.com/jodonoghue/wxHaskell] and temporary maintenance repo [https://github.com/atzedijkstra/wxHaskell] on github
+
* [https://github.com/wxHaskell/wxHaskell wxHaskell repository], as of 2 Aug 2013 replacing the [https://github.com/jodonoghue/wxHaskell old repo] and [https://github.com/atzedijkstra/wxHaskell temporary maintenance repo] on GitHub
  
 
== 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)
* [http://en.wordpress.com/tag/wxhaskell/ Blog articles about wxHaskell]
+
* [https://en.wordpress.com/tag/wxhaskell/ Blog articles about wxHaskell]
 
* [http://stackoverflow.com/questions/tagged/wxhaskell Questions about wxHaskell] on stackoverflow
 
* [http://stackoverflow.com/questions/tagged/wxhaskell Questions about wxHaskell] on stackoverflow
* Sander Evers, Peter Achten, and Jan Kuper: [http://www.st.cs.ru.nl/papers/2005/eves2005-FFormsIFL04.pdf A Functional Programming Technique for Forms in GUI] (PDF)
+
* Sander Evers, Peter Achten, and Jan Kuper: [https://web.archive.org/web/20110724164915/http://www.st.cs.ru.nl/papers/2005/eves2005-FFormsIFL04.pdf A Functional Programming Technique for Forms in GUI] (PDF, from the Web Archive)
 
* [http://www.sandr.dds.nl/FunctionalForms/ FunctionalForms], a combinator library/domain specific language for wxHaskell which enables a very concise programming style for forms (not maintained since 2005)
 
* [http://www.sandr.dds.nl/FunctionalForms/ FunctionalForms], a combinator library/domain specific language for wxHaskell which enables a very concise programming style for forms (not maintained since 2005)
* [http://wewantarock.wordpress.com/2010/01/31/building-a-text-editor-part-1/  Learning by Example Beginners]: a Text Editor
+
* [https://wewantarock.wordpress.com/2010/01/31/building-a-text-editor-part-1/  Learning by Example Beginners]: a Text Editor
* [http://wewantarock.wordpress.com/2010/01/07/custom-controls-in-wxhaskell-part-1/  Learning by Example Intermediate]:  Custom controls
+
* [https://wewantarock.wordpress.com/2010/01/07/custom-controls-in-wxhaskell-part-1/  Learning by Example Intermediate]:  Custom controls
  
 
== See also ==
 
== See also ==
Line 90: Line 92:
 
* [http://hackage.haskell.org/package/wxhnotepad An example of how to implement a basic notepad with wxHaskell]
 
* [http://hackage.haskell.org/package/wxhnotepad An example of how to implement a basic notepad with wxHaskell]
 
* [http://www.mail-archive.com/wxhaskell-users@lists.sourceforge.net/msg01178.html Reducing linking and startup times]
 
* [http://www.mail-archive.com/wxhaskell-users@lists.sourceforge.net/msg01178.html Reducing linking and startup times]
* [http://sourceforge.net/tracker/download.php?group_id=73133&atid=536848&file_id=390034&aid=3087609 Modified Paint.hs example] to show wxGCDC and graphics path drawing in action.
+
* [http://sourceforge.net/p/wxhaskell/feature-requests/6/ Modified Paint.hs example] to show wxGCDC and graphics path drawing in action.
* [http://en.wikibooks.org/wiki/Haskell/GUI The Haskell wikibook GUI chapter]
+
* [https://en.wikibooks.org/wiki/Haskell/GUI The Haskell wikibook GUI chapter]
* [http://lindstroem.wordpress.com/2008/05/21/using-wxgeneric/ WxGeneric]
+
* [https://lindstroem.wordpress.com/2008/05/21/using-wxgeneric/ WxGeneric]
 
* [[wxFruit]]
 
* [[wxFruit]]
 
* [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.167.3926&rep=rep1&type=pdf Can GUI Programming Be Liberated From The IO Monad]
 
* [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.167.3926&rep=rep1&type=pdf Can GUI Programming Be Liberated From The IO Monad]
Line 101: Line 103:
 
* [https://github.com/JohnLato/Haskell-BlackBoard/blob/master/README.md Haskell-BlackBoard:] a drawing application for making slideshows and videos, based on wxHaskell and [[Functional Reactive Programming]]
 
* [https://github.com/JohnLato/Haskell-BlackBoard/blob/master/README.md Haskell-BlackBoard:] a drawing application for making slideshows and videos, based on wxHaskell and [[Functional Reactive Programming]]
 
* [[Reactive-banana|reactive-banana]] - FRP library with bindings to wxHaskell.
 
* [[Reactive-banana|reactive-banana]] - FRP library with bindings to wxHaskell.
* [http://uu-computerscience.github.com/js-asteroids/ wxHaskell for the web]: a port of a subset of wxHaskell to the web browser.  
+
* [http://uu-computerscience.github.io/js-asteroids/ wxHaskell for the web]: a port of a subset of wxHaskell to the web browser.  
 
* [http://stackoverflow.com/questions/15867654/wx-haskell-drag-and-drop-example wxHaskell Drag and Drop example] (Stackoverflow)
 
* [http://stackoverflow.com/questions/15867654/wx-haskell-drag-and-drop-example wxHaskell Drag and Drop example] (Stackoverflow)
 
* The package [http://hackage.haskell.org/package/binding-wx binding-wx]; binds mutable data and lists to WxHaskell widgets.
 
* The package [http://hackage.haskell.org/package/binding-wx binding-wx]; binds mutable data and lists to WxHaskell widgets.
 +
* [http://wxhaskell.sourceforge.net/applications.html Application screenshots]
 +
* [http://foswiki.cs.uu.nl/foswiki/Dazzle/WebHome Dazzle] (see also [http://www.cs.uu.nl/dazzle/f08-schrage.pdf Haskell Ready to Dazzle the Real World] (PDF))
 +
* [https://www.cs.tcd.ie/Andrew.Butterfield/Saoithin/ Unifying Theories of Programming Theorem Prover U·(TP)2]
 +
* [https://github.com/bendmorris/pssat Protein Secondary Structure Alignment Tool] - performs a probabilistic alignment of predicted secondary structures, and generates HTML output
  
  

Latest revision as of 17:03, 9 June 2016


Wxhaskell-black-small.png


Contents

[edit] 1 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.9x branch supports wxWidgets 2.9 and 3.0. For wxWidgets 3.0, Windows users can easily install wxWidgets together with wxHaskell, using a wxInstall package. The benefit of wxWidgets 3.0 is that it supports quite a number of new and more modern GUI elements. wxHaskell 0.9x is essential if you want to build for 64 bit MacOS X targets (e.g. Lion).

[edit] 2 Status

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.

[edit] 3 News

30 December 2015
wxInstall Achelanne 0.1 and wxHaskell 0.92.2 are released.
9 October 2015
wxInstall Abriline packages and wxHaskell 0.92.1 are released.
27 August 2015
wxHaskell 0.92.0 is released.
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.

See also Old wxHaskell news

[edit] 4 Documentation

[edit] 5 Resources

[edit] 6 External links

[edit] 7 See also