#Fltkhs-demos These are end-to-end demos of [FLTKHS] [1], a Haskell Binding to the FLTK GUI Library Fltkhs-demos aims not only to show off the features of the [fltkhs] [1] but also serve as a way of learning the API by example. For more thorough documentation on the [fltkhs] [1] API please see the [FLTKHS module] [2] of that package. ## Introduction The demos shipped with this package are listed in `fltkhs-demos.cabal` as separate `Executable` components. Once the package is installed they are installed to Cabal's standard /bin/ directory (usually ~/.cabal/bin on Linux). Note that the executables are prefixed with \"fltkhs-\". This is in order to prevent the demo executables from stomping over applications of the same name the user might already have installed. Typing: ``` > fltkhs- ``` at the command line should show a complete list of available demos. Alternatively you can do: ``` > ls ~/.cabal/bin/fltkhs-* ``` ## Learning The API Most of the demos are exact ports of those shipped in the 'test' directory of the distribution. It is hoped the user will study the Haskell demo code side-by-side with the C++ demo code in order to understand the API. The section __API Guide__ in the [FLKTHS documentation] [2] covers this in more detail. ## Why is the demo code so un-Haskelly? For being written in Haskell, the demo code is horrifyingly/amazingly imperative and stateful. Although it may repulse those who used to pure Haskell idioms it is that way for a reason. The demo code was never meant to be idiomatic Haskell code but a way of showing as much of the API as possible. The API itself closely resembles the underlying C++ code which is imperative and stateful. This has the advantage of making the API easier to learn. For instance, assuming FLTK was installed from source compare /src/Examples/arc.hs with /test/arc.cxx in the FLTK source directory. There is quite a bit of correspondence and it is easy to see how the Haskell API functions map to the C++ ones. ## Fast Compilation Flag This package comes with a Cabal flag `fastCompile` that is enabled by default and speeds up compilation. More information on this flag is available under the __Compilation__ section of the [FLTKHS documentation] [2]. To disable this flag, tell Cabal to ignore it during the `configure` step: ``` cabal configure -f-fastCompile ``` # GHCi The recommended way to running the REPL in a `fltkhs` application is `cabal repl`. For example to run the `fltkhs-arc` example do: ``` cabal repl fltkhs-arc ``` __NOTE__: For now it only works in GHC 7.8.x. GHC 7.10.x has an unfortunate regression that crashes GHCi because it cannot find symbols in the C library that contains the C++ bindings. This has been fixed in GHC 8. More information is available in the [ticket] [4]. [1]: http://hackage.haskell.org/package/fltkhs/ [2]: http://hackage.haskell.org/package/fltkhs/docs/Graphics-UI-FLTK-LowLevel-FLTKHS.html [3]: https://github.com/deech/fltkhs-fluid-hello-world [4]: https://ghc.haskell.org/trac/ghc/ticket/10568