@@ -23,6 +23,10 @@ import IRTS.CodegenCommon
24import Options.Applicative
24import Options.Applicative
25import Options.Applicative.Arrows
25import 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)
26import Data.Char
30import Data.Char
27import Data.Maybe
31import Data.Maybe
@@ -137,7 +141,7 @@ parseFlags = many $
137 <|> flag' WarnOnly (long "warn")
141 <|> flag' WarnOnly (long "warn")
139 <|> (Pkg <$> strOption (short 'p' <> long "package" <> help "Add package as a dependency"))
143 <|> (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"))
142 -- Package commands
146 -- Package commands
143 <|> (PkgBuild <$> strOption (long "build" <> metavar "IPKG" <> help "Build package"))
147 <|> (PkgBuild <$> strOption (long "build" <> metavar "IPKG" <> help "Build package"))
@@ -209,6 +213,14 @@ parseFlags = many $
209 getExt s = fromMaybe (error ("Unknown extension " ++ s)) (maybeRead s)
213 getExt s = fromMaybe (error ("Unknown extension " ++ s)) (maybeRead s)
210 maybeRead :: String -> Maybe LanguageExt
214 maybeRead :: String -> Maybe LanguageExt
211 maybeRead = fmap fst . listToMaybe . reads
215 maybeRead = fmap fst . listToMaybe . reads
216+ portReader :: ReadM REPLPort
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\"")
213parseVersion :: Parser (a -> a)
225parseVersion :: Parser (a -> a)
214parseVersion = infoOption getIdrisVersion (short 'v' <> long "version" <> help "Print version information")
226parseVersion = infoOption getIdrisVersion (short 'v' <> long "version" <> help "Print version information")