import Halive.Recompiler
import Halive.SubHalive
import Control.Concurrent.STM
import Control.Monad

main :: IO a
main = do
    ghc <- startGHC defaultGHCSessionConfig

    fooRecompiler <- recompilerForExpression ghc "test/TestFileFoo.hs" "foo"
    barRecompiler <- recompilerForExpression ghc "test/TestFileBar.hs" "bar"

    forever $ do
        result <- atomically
            (readTChan (recResultTChan fooRecompiler)
            `orElse`
             readTChan (recResultTChan barRecompiler))
        case result of
            Left errors -> putStrLn errors
            Right values -> forM_ values $ \value ->
                case getCompiledValue value of
                    Just v ->
                        putStrLn v
                    Nothing ->
                        putStrLn "Error: foo or bar was not of type String"