Hardcore Processing - Realize Your Wild Software Ideas Affordably


Start Here | News | For Artists | For Developers | Products & Projects | Research & Articles | Entertainment | Company Profile | Contact


This document gives a quick overview of AbtractUI::ML, which is a crossplatform GUI toolkit for Standard ML capable of handling things like pluggable Look and Feel. The basic architecture is presented and a discription of the motivation for some of it's design is given. The Construct which is a GUI builder for AbstractUI::ML is also briefly presented.


With UI standing for user interface, then by definition, AbstractUI::ML is a UI-concept independent UI-API in Standard ML currently with crossplatform classical windowing system implementations for 'WindowsNT/95/98', 'Linux/X-Windows' and other Unixes. (yes, that's a long definition... :). AbstractUI::ML is distributed under the GNU General Public Library Licence (LGPL), which (in short) allows you to build commercial applications with it, as long as you distribute all the sourcecode and copyrightnotices for AbstractUI::ML in unmodified form along with your software.

The Construct is a GUI builder for AbstractUI::ML which can import and export SML'97 code ready to be compiled into an application. Actually it is the first GUI builder ever written in Standard ML! The Construct is distributed under the GNU General Public Licence (GPL), which (in short) only allows you to write any extensions for The Construct if you distribute all the sourcecode for your extensions under a GPL compatiple licence. However you may of course use the user interfaces generated with The Construct for whatever you like.

The project homepages are:

This document is available as an online HTML version at:

From here there are links to other versions of the document:

A slight change of name

On the project homepage, the name is still ML::AbstractUI. This is in fact an ML type error, since ML is what we already have and AbstractUI is the new element that we're cons'ing onto it. So, the new and correct name is AbstractUI::ML.


The main components of AbstractUI::ML are the following:

User interfaces are built and controlled in the following way:

Software component dependencies

In AbstractUI::ML great care has been taken to avoid that applications depend directly on the types and the implementations of UI controls, such as buttons and listboxes. The important dependencies are illustrated in the following UML diagram.


UML diagram of the type dependencies between software components in AbstractUI::ML

Had the applications developed been dependent upon the types or the implementations of UI controls, then any changes or enhancements made on UI controls could potentially break all applications using those UI controls.


UML diagram of how the type dependencies might be between software components in other GUI toolkits.


Protocols work the following way:

Some of the protocols which are implemented:

Typecasting a typeneutral node into a protocol can be done in 2 ways:

About the type-neutral-hack

Some of the reasons why the graph nodes are typeneutral and has to be typecasted into protocols are:

Typeneutral nodes are implemented (very roughly) in the following way:

About the implemented UI Controls

The components in AbstractUI::ML consists of typeneutral graph nodes. The subgraph of an implemented UI Control typically looks something like the following:


The subgraph of a typical UI Control

The Construct - a GUI builder for AbstractUI::ML

Given the introduction above to AbstractUI::ML, then the GUI builder for it should be really simple to use and understand. The easiest way to learn about it is to install it and try it. When starting The Construct you will see the following windows:

UI Palette

In this window there's a button for each UI Control available in AbstractUI::ML (or rather - which were available when The Construct was compiled).

Protocol Accessor

This is where you can modify the UI Controls that you create.


This window lets you load and save the user interfaces that you have built with The Construct.

The generated code may not be very suitable for editing and may not be very readable for humans either. Also The Construct will certainly not be able to read any ML file you throw at it. It is intended only to be able to read the files that it has generated itself. However you should not need to edit the code, since the code generated by The Construct is intended to be completely separate UI code which is independent of application code.

Hardcore ProcessingModified: 2016-03-19
E-mail: Contact