.. _frontend-main-function: ************* Main function ************* .. highlight:: cpp The main function of the application is in ``frontend/src/Main/main.cpp``. It is an ordinary Qt main function, but it also initialises the Haskell runtime by calling ``hs_init`` and shutting it down gracefully via ``hs_exit``. Also, the objects containing Haskell references should be constructed in a new block before the ``hs_exit`` call. This is because at that point, every Haskell object should be properly de-initialised; otherwise, bad things could happen. An example:: int main(int argc, char *argv[]) { // First, we initialise the Haskell runtime. // TODO: we should somehow check // which arguments are meant for Haskell; // e.g. by using +RTS and -RTS. hs_init(&argc, &argv); QApplication a(argc, argv); int exitCode; { // We put this into a separate block so that // every Haskell object gets properly destructed // before the hs_exit call. // By constructing the main window, // the MainViewModel and HsCalcStateWrapper instances // (and this way, the Haskell CalcState object) // are also created. MainWindow w; w.show(); exitCode = a.exec(); } // We finally shut down the Haskell runtime. hs_exit(); return exitCode; } Again, feel free to modify this file if you are familiar with Qt.