Initial commit

This commit is contained in:
2018-08-02 21:39:08 +03:00
parent 8f3ebb139e
commit 0579b6d3e1
10 changed files with 173 additions and 0 deletions

34
src/Devel/Main.hs Normal file
View File

@ -0,0 +1,34 @@
module Devel.Main where
import Main (defaultMain)
import Control.Concurrent
import Control.Monad (void)
import Data.IORef (IORef, newIORef, readIORef, writeIORef)
import Foreign.Store (Store(..), lookupStore, readStore, storeAction, withStore)
import GHC.Word (Word32)
update :: IO ()
update = do
lookupStore tidStoreNum >>= maybe setupNew restart
where
doneStore :: Store (MVar ())
doneStore = Store 0
setupNew :: IO ()
setupNew = do
done <- storeAction doneStore newEmptyMVar
tid <- start done
void $ storeAction (Store tidStoreNum) (newIORef tid)
restart tidStore = modifyStoredIORef tidStore $ \tid -> do
killThread tid
withStore doneStore takeMVar
readStore doneStore >>= start
start :: MVar () -> IO ThreadId
start done = forkFinally defaultMain (\_ -> putMVar done ())
modifyStoredIORef :: Store (IORef a) -> (a -> IO a) -> IO ()
modifyStoredIORef store f = withStore store $ \ref -> do
v <- readIORef ref
f v >>= writeIORef ref
tidStoreNum :: Word32
tidStoreNum = 1

7
src/Main.hs Normal file
View File

@ -0,0 +1,7 @@
module Main where
defaultMain :: IO ()
defaultMain = putStrLn "Hello haskell"
main :: IO ()
main = defaultMain