
Perhaps, as others have suggested, an intermediate approach. Have the top level be of a form suited for Haskell. Have the middle level be linkage to a binding library, and specify one binding library (say, GTK), which is likely to be available. This approach has the limitation that one can't do anything that isn't covered by the low-level library, so don't fixate on one particular low level library. But pick one that's available to start with. Later, after the high and mid levels are well developed, one can implement them also via bindings to other graphic kits (which, perhaps, aren't as portable...or at least not yet ported as much). Perhaps it will turn out that the first choice of a low level library is the wrong one. In that case only one section of the code would need to be re-written. (Well, in an ideal world. I'm aware of how features leak through the levels. If I need to load an image file, it matters what formats the toolkit can handle.) I've been searching though languages and graphic toolkits, and I can promise you I haven't yet found an ideal one of either. I'm trying to force myself to settle for "good enough" so I can stop searching. The best isn't only the enemy of the good, it also the enemy of any actual implementation. Krasimir Angelov wrote:
...