module Data.Record.Anon.Internal.Plugin.Source.Options (
Options(..)
, parseOpts
, Mode(..)
, parseMode
) where
data Options = Options {
Options -> Bool
debug :: Bool
, Options -> Bool
typelet :: Bool
, Options -> Bool
noapply :: Bool
}
defaultOptions :: Options
defaultOptions :: Options
defaultOptions = Options {
debug :: Bool
debug = Bool
False
, typelet :: Bool
typelet = Bool
False
, noapply :: Bool
noapply = Bool
False
}
parseOpts :: [String] -> Options
parseOpts :: [String] -> Options
parseOpts = ((Options -> Options) -> Options -> Options
forall a b. (a -> b) -> a -> b
$ Options
defaultOptions) ((Options -> Options) -> Options)
-> ([String] -> Options -> Options) -> [String] -> Options
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Options -> Options)
-> (Options -> Options) -> Options -> Options)
-> (Options -> Options)
-> [Options -> Options]
-> Options
-> Options
forall a b. (a -> b -> b) -> b -> [a] -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (Options -> Options) -> (Options -> Options) -> Options -> Options
forall b c a. (b -> c) -> (a -> b) -> a -> c
(.) Options -> Options
forall a. a -> a
id ([Options -> Options] -> Options -> Options)
-> ([String] -> [Options -> Options])
-> [String]
-> Options
-> Options
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Options -> Options) -> [String] -> [Options -> Options]
forall a b. (a -> b) -> [a] -> [b]
map String -> Options -> Options
aux
where
aux :: String -> Options -> Options
aux :: String -> Options -> Options
aux String
"debug" Options
opts = Options
opts { debug = True }
aux String
"typelet" Options
opts = Options
opts { typelet = True }
aux String
"noapply" Options
opts = Options
opts { noapply = True }
aux String
opt Options
_ = String -> Options
forall a. HasCallStack => String -> a
error (String -> Options) -> String -> Options
forall a b. (a -> b) -> a -> b
$ String
"invalid option: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
forall a. Show a => a -> String
show String
opt
data Mode = Simple | Advanced
parseMode :: String -> Maybe Mode
parseMode :: String -> Maybe Mode
parseMode String
"ANON" = Mode -> Maybe Mode
forall a. a -> Maybe a
Just Mode
Simple
parseMode String
"ANON_F" = Mode -> Maybe Mode
forall a. a -> Maybe a
Just Mode
Advanced
parseMode String
_ = Maybe Mode
forall a. Maybe a
Nothing