packages feed

purescript-0.10.3: psc-ide-client/Main.hs

module Main where

import           Prelude             ()
import           Prelude.Compat

import           Control.Exception
import qualified Data.ByteString.Char8 as BS8
import qualified Data.Text.IO          as T
import           Data.Version          (showVersion)
import           Data.Monoid           ((<>))
import           Network
import           Options.Applicative   (ParseError (..))
import qualified Options.Applicative   as Opts
import           System.Exit
import           System.IO

import qualified Paths_purescript      as Paths

data Options = Options
  { optionsPort :: PortID
  }

main :: IO ()
main = do
    Options port <- Opts.execParser opts
    client port
  where
    parser =
        Options <$>
        (PortNumber . fromIntegral <$>
         Opts.option Opts.auto (Opts.long "port" <> Opts.short 'p' <> Opts.value (4242 :: Integer)))
    opts = Opts.info (version <*> Opts.helper <*> parser) mempty
    version = Opts.abortOption (InfoMsg (showVersion Paths.version)) $
      Opts.long "version" <> Opts.help "Show the version number" <> Opts.hidden

client :: PortID -> IO ()
client port = do
    h <-
        connectTo "127.0.0.1" port `catch`
        (\(SomeException e) ->
              putStrLn
                  ("Couldn't connect to psc-ide-server on port: " ++
                   show port ++ " Error: " ++ show e) >>
              exitFailure)
    T.hPutStrLn h =<< T.getLine
    BS8.putStrLn =<< BS8.hGetLine h
    hFlush stdout
    hClose h