Monday, 5 May 2014

HsQML 0.3.0.0 released: Now with Qt 5

I've just made a new major release of HsQML, my Haskell binding for the Qt Quick GUI framework. You can download it from Hackage in the usual manner.

This is a particularly exciting release because it's the first to have been ported over to use Qt 5. Previously, HsQML was developed against an older version of the Qt Quick technology which shipped as part of Qt 4.7 and 4.8. Support for Qt 5 has been a constant theme in the e-mails I get concerning HsQML for some time and so I'm pleased to finally deliver on that point.

There are also number of other improvements to the library which should allow more idiomatic QML code and hence reduce the need for helper JavaScript. Properties now support an associated notify signal which allows QML to automatically update in response to property changes rather than needing manual signal handlers. Also, lists and Maybe values can be marshalled between Haskell and QML natively, again reducing friction between the two environments.

The API has been redesigned slightly so that object classes and signal keys can be defined directly inside Haskell functions in addition to the older type-class based method. It's unclear yet if this style is wholly superior but, for smaller programs at least, it permits greater clarity and much less verbosity.

Finally, although still far from comprehensive, I've spent some time trying to improve the documentation on my web-site. It now provides some more substantial examples and goes into greater depth. The complete buildable source code for these examples is contained in the hsqml-demo-samples package. Also, the original Nine Men's Morris demo application is still available, but the package has been renamed to hsqml-demo-morris.

release-0.3.0.0 - 2014.05.04

  * Ported to Qt 5 and Qt Quick 2
  * Added type-free mechanism for defining classes.
  * Added type-free mechanism for defining signal keys.
  * Added property signals.
  * Added marshallers for Bool, Maybe, and lists.
  * Added less polymorphic aliases for def functions.
  * Replaced Tagged with Proxy in public API.
  * Removed marshallers for URI and String.
  * New design for marshalling type-classes (again).
  * Generalised facility for user-defined Marshal instances.
  * Relaxed Cabal dependency constraint on 'QuickCheck'.
  * Fixed GHCi on Windows with pre-7.8 GHC.