packages feed

minilight-lua-0.1.0.0: example/Main.hs

{-# LANGUAGE OverloadedStrings #-}
module Main where

import Control.Concurrent.MVar
import Control.Lens
import Control.Monad
import Data.Maybe
import MiniLight
import MiniLight.Lua

mainFile = "example/main.lua"

main :: IO ()
main = runLightT $ runMiniloop
  (defConfig { hotConfigReplacement = Just "example", appConfigFile = Just "" })
  initial
  (const mainloop)
 where
  initial = do
    comp <- registerComponent mainFile newLuaComponent
    reload mainFile

    return ()

  mainloop :: MiniLoop ()
  mainloop = do
    ref <- view _events
    evs <- liftIO $ tryReadMVar ref

    let notifys = case evs of
          Just evs -> mapMaybe asNotifyEvent evs
          _        -> []
    unless (null notifys) $ reload mainFile