@@ -23,6 +23,10 @@ import IRTS.CodegenCommon
2323
2424import Options.Applicative
2525import Options.Applicative.Arrows
26+import Options.Applicative.Types (ReadM(..))
27+import Control.Monad.Trans (lift)
28+import Control.Monad.Trans.Reader (ask)
29+import Control.Monad.Trans.Except (throwE)
2630import Data.Char
2731import Data.Maybe
2832
@@ -137,7 +141,7 @@ parseFlags = many $
137141 <|> flag' WarnOnly (long "warn")
138142
139143 <|> (Pkg <$> strOption (short 'p' <> long "package" <> help "Add package as a dependency"))
140− <|> (Port <$> strOption (long "port" <> metavar "PORT" <> help "REPL TCP port"))
144+ <|> (Port <$> option portReader (long "port" <> metavar "PORT" <> help "REPL TCP port - pass \"none\" to not bind any port"))
141145
142146 -- Package commands
143147 <|> (PkgBuild <$> strOption (long "build" <> metavar "IPKG" <> help "Build package"))
@@ -209,6 +213,14 @@ parseFlags = many $
209213 getExt s = fromMaybe (error ("Unknown extension " ++ s)) (maybeRead s)
210214 maybeRead :: String -> Maybe LanguageExt
211215 maybeRead = fmap fst . listToMaybe . reads
216+ portReader :: ReadM REPLPort
217+ portReader =
218+ ((ListenPort . fromIntegral) <$> auto) <|>
219+ (ReadM $ do opt <- ask
220+ if map toLower opt == "none"
221+ then return $ DontListen
222+ else lift $ throwE $ ErrorMsg $
223+ "got " <> opt <> " expected port number or \"none\"")
212224
213225parseVersion :: Parser (a -> a)
214226parseVersion = infoOption getIdrisVersion (short 'v' <> long "version" <> help "Print version information")