1717{-# LANGUAGE OverloadedStrings #-}
1818{-# LANGUAGE PackageImports #-}
1919{-# LANGUAGE TemplateHaskell #-}
20+ {-# LANGUAGE NoImplicitPrelude #-}
2021
2122module Main where
2223
23- import Prelude ()
24- import Prelude.Compat
24+ import Protolude
2525
26- import Control.Concurrent (forkFinally )
2726import Control.Concurrent.STM
28- import Control.Exception (bracketOnError , catchJust )
29- import Control.Monad
30- import Control.Monad.Error.Class
3127import "monad-logger" Control.Monad.Logger
32- import Control.Monad.Reader
33- import Control.Monad.Trans.Except
34- import qualified Data.Text as T
3528import qualified Data.Text.IO as T
3629import Data.Version (showVersion )
3730import Language.PureScript.Ide
@@ -43,19 +36,19 @@ import Network hiding (socketPort, accept)
4336import Network.BSD (getProtocolNumber )
4437import Network.Socket hiding (PortNumber , Type ,
4538 sClose )
46- import Options.Applicative
39+ import Options.Applicative hiding ( (<>) )
4740import System.Directory
4841import System.FilePath
49- import System.IO
42+ import System.IO hiding ( putStrLn , print )
5043import System.IO.Error (isEOFError )
5144
5245import qualified Paths_purescript as Paths
5346
5447-- "Borrowed" from the Idris Compiler
5548-- Copied from upstream impl of listenOn
5649-- bound to localhost interface instead of iNADDR_ANY
57- listenOnLocalhost :: PortID -> IO Socket
58- listenOnLocalhost ( PortNumber port) = do
50+ listenOnLocalhost :: PortNumber -> IO Socket
51+ listenOnLocalhost port = do
5952 proto <- getProtocolNumber " tcp"
6053 localhost <- inet_addr " 127.0.0.1"
6154 bracketOnError
@@ -66,12 +59,11 @@ listenOnLocalhost (PortNumber port) = do
6659 bindSocket sock (SockAddrInet port localhost)
6760 listen sock maxListenQueue
6861 pure sock)
69- listenOnLocalhost _ = error " Wrong Porttype"
7062
7163data Options = Options
7264 { optionsDirectory :: Maybe FilePath
7365 , optionsOutputPath :: FilePath
74- , optionsPort :: PortID
66+ , optionsPort :: PortNumber
7567 , optionsNoWatch :: Bool
7668 , optionsDebug :: Bool
7769 }
@@ -88,8 +80,8 @@ main = do
8880 unlessM (doesDirectoryExist fullOutputPath) $ do
8981 putStrLn (" Your output directory didn't exist. I'll create it at: " <> fullOutputPath)
9082 createDirectory fullOutputPath
91- putStrLn " This usually means you didn't compile your project yet."
92- putStrLn " psc-ide needs you to compile your project (for example by running pulp build)"
83+ putText " This usually means you didn't compile your project yet."
84+ putText " psc-ide needs you to compile your project (for example by running pulp build)"
9385
9486 unless noWatch $
9587 void (forkFinally (watcher ideState fullOutputPath) print )
@@ -100,18 +92,18 @@ main = do
10092 where
10193 parser =
10294 Options
103- <$> optional (strOption (long " directory" <> short ' d' ))
104- <*> strOption (long " output-directory" <> value " output/" )
105- <*> (PortNumber . fromIntegral <$>
106- option auto (long " port" <> short ' p' <> value (4242 :: Integer )))
95+ <$> optional (strOption (long " directory" `mappend` short ' d' ))
96+ <*> strOption (long " output-directory" `mappend` value " output/" )
97+ <*> (fromIntegral <$>
98+ option auto (long " port" `mappend` short ' p' `mappend` value (4242 :: Integer )))
10799 <*> switch (long " no-watch" )
108100 <*> switch (long " debug" )
109101 opts = info (version <*> helper <*> parser) mempty
110102 version = abortOption
111103 (InfoMsg (showVersion Paths. version))
112- (long " version" <> help " Show the version number" )
104+ (long " version" `mappend` help " Show the version number" )
113105
114- startServer :: PortID -> IdeEnvironment -> IO ()
106+ startServer :: PortNumber -> IdeEnvironment -> IO ()
115107startServer port env = withSocketsDo $ do
116108 sock <- listenOnLocalhost port
117109 runLogger (runReaderT (forever (loop sock)) env)
@@ -141,8 +133,8 @@ startServer port env = withSocketsDo $ do
141133 liftIO (hClose h)
142134
143135
144- acceptCommand :: (MonadIO m , MonadLogger m , MonadError T. Text m )
145- => Socket -> m (T. Text , Handle )
136+ acceptCommand :: (MonadIO m , MonadLogger m , MonadError Text m )
137+ => Socket -> m (Text , Handle )
146138acceptCommand sock = do
147139 h <- acceptConnection
148140 $ (logDebug) " Accepted a connection"
0 commit comments