aboutsummaryrefslogtreecommitdiff
path: root/src/Main.hs
blob: ee11e927b204bdaa5a3e28a96a9344b45a0d3724 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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 "<no output>"])
    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