sloane 2.0.1 → 2.0.2
raw patch · 4 files changed
+17/−14 lines, 4 files
Files
- README.md +1/−1
- Sloane/Config.hs +1/−1
- sloane.cabal +1/−1
- sloane.hs +14/−11
README.md view
@@ -1,5 +1,5 @@ ----title: SLOANE(1) Sloane User Manual | Version 2.0.1+title: SLOANE(1) Sloane User Manual | Version 2.0.2 date: 7 Jan 2015 ---
Sloane/Config.hs view
@@ -29,7 +29,7 @@ h <- getHomeDirectory let dsloane = h </> ".sloane" return Config- { nameVer = "sloane 2.0.1"+ { nameVer = "sloane 2.0.2" , home = h , sloaneDir = dsloane , sloaneDB = dsloane </> "sloane.db"
sloane.cabal view
@@ -1,5 +1,5 @@ Name: sloane-Version: 2.0.1+Version: 2.0.2 Synopsis: A command line interface to Sloane's On-Line Encyclopedia of Integer Sequences Description: A command line interface to Sloane's On-Line Encyclopedia
sloane.hs view
@@ -11,6 +11,7 @@ import qualified Data.Text as T import qualified Data.Text.IO as IO import Data.Text.Encoding (decodeUtf8)+import System.IO (isEOF) import Network.HTTP (urlEncodeVars) import Network.Curl.Download (openURI) import Options.Applicative@@ -90,11 +91,9 @@ match q = (if invert opts then id else not) (DB.null $ DB.grep q db) parseSeqs = filter (not . T.null) . map mkSeq . T.lines -hiddenHelp :: Parser (a -> a)-hiddenHelp = abortOption ShowHelpText $ hidden <> long "help"- optionsParser :: Parser Options-optionsParser = hiddenHelp <*> (Options+optionsParser =+ (abortOption ShowHelpText $ long "help") <*> (Options <$> switch ( short 'a' <> long "all"@@ -132,7 +131,7 @@ ( long "transform" <> metavar "NAME" <> value ""- <> help ("Apply the named transform to input sequence"))+ <> help "Apply the named transform to input sequence") <*> switch ( long "list-transforms" <> help "List the names of all transforms" )@@ -150,13 +149,18 @@ put | url opts = putStr . unlines . oeisUrls cfg | otherwise = DB.put cfg $ if full opts then oeisKeys else keys opts +getTerms :: Options -> IO Options+getTerms opts+ | filtr opts = return opts+ | otherwise = (\xs -> opts {terms = xs}) <$>+ case terms opts of+ [] -> isEOF >>= \b ->+ if b then error "<stdin>: end of file" else return <$> getLine+ ts -> return ts+ main :: IO () main = do- let pprefs = prefs mempty- let pinfo = info optionsParser fullDesc- let usage = handleParseResult . Failure- $ parserFailure pprefs pinfo ShowHelpText mempty- opts <- customExecParser pprefs pinfo+ opts <- getTerms =<< execParser (info optionsParser fullDesc) let tname = transform opts let anum = anumber opts let lookupSeq = maybeToList . DB.lookupSeq (mkANumber anum)@@ -166,7 +170,6 @@ | listTransforms opts = const $ mapM_ (putStrLn . name) transforms | anum > 0 = \c -> lookupSeq <$> DB.read c >>= mapM_ IO.putStrLn | filtr opts = \c -> DB.read c >>= filterDB opts >>= mapM_ IO.putStrLn- | null (terms opts) = const usage | not (null tname) = const $ applyTransform opts tname | local opts = search (\o cfg -> grepDB o <$> DB.read cfg) opts | otherwise = search oeisLookup opts