Files
to-hen/onomastics-ng/app/Main.hs

54 lines
1.7 KiB
Haskell

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
module Main where
import Data.Maybe (fromMaybe)
import Data.Text (Text)
import Network.HTTP.Client.TLS (newTlsManager)
import Options.Applicative
import Stoepel
import Svg
import Types
data Mode = Relative | Absolute
data Options = Options
{ mode :: Mode
, surname :: Text
, fillColor :: Maybe Text
, areaMode :: AreaKind
}
parseOptions :: Parser Options
parseOptions =
Options
<$> flag Absolute Relative (long "relative" <> help "Relative numbers (instead of absolute)")
<*> strArgument (metavar "SURNAME" <> help "Surname")
<*> optional (strOption (long "color" <> metavar "COLOR" <> help "Color of the SVG"))
<*> flag District State (long "states" <> help "Analyze by state (instead of district)")
opts :: ParserInfo Options
opts = info (parseOptions <**> helper) (fullDesc <> progDesc "Map your German surname")
main :: IO ()
main = do
options <- execParser opts
manager' <- newTlsManager
let computeFunction =
case mode options of
Relative -> relativeCount
Absolute -> absoluteCount
color = fromMaybe "black" $ fillColor options
res <- runStoepel manager' $ do
case areaMode options of
State -> do
ds <- states
stats <- computeAreaStatistics computeFunction ds <$> stateStatistics (Just $ surname options)
return $ drawMap color ds stats
District -> do
ds <- districts
stats <- computeAreaStatistics computeFunction ds <$> districtStatistics (Just $ surname options)
return $ drawMap color ds stats
print res