module Main where import Control.Concurrent.MVar import Data.Text (Text) import qualified Data.Text as T import Ghci import IRC runInGhci :: Ghci -> Text -> IO (Ghci, [Text]) runInGhci ghci message = do (ghci', output) <- runStmtClever ghci (T.unpack message) case output of Error "" -> return (ghci', [T.pack "Error?"]) Error err -> return (ghci', [T.pack err]) Ignored -> return (ghci', []) Return "" -> return (ghci', [T.pack ""]) Return s -> return (ghci', [T.pack s]) main :: IO () main = do ghci0 <- makeGhci ghcivar <- newMVar ghci0 connectIRC (\t -> T.take 2 t == T.pack "% ") (\recvmsg -> do ghci <- takeMVar ghcivar (ghci', msgs) <- runInGhci ghci (T.drop 2 recvmsg) putMVar ghcivar ghci' return msgs) -- let loop :: Ghci -> IO () -- loop ghci = do -- line <- getLine -- (ghci', moutput) <- runStmtClever ghci line -- case moutput of -- Just output -> putStrLn $ "output = <" ++ output ++ ">" -- Nothing -> putStrLn "oops" -- loop ghci' -- makeGhci >>= loop