1 module PursLoader.Options
7 import Data.Either (either)
9 import Data.Foreign (Foreign(), F())
10 import Data.Foreign.Class (IsForeign, read, readProp)
11 import Data.Foreign.NullOrUndefined (NullOrUndefined(), runNullOrUndefined)
13 import Data.Maybe (Maybe(..), maybe)
15 noPreludeOpt = "no-prelude"
19 noMagicDoOpt = "no-magic-do"
23 verboseErrorsOpt = "verbose-errors"
27 pscMakeDefaultOutput = "output"
30 = Options { noPrelude :: NullOrUndefined Boolean
31 , noOpts :: NullOrUndefined Boolean
32 , noMagicDo :: NullOrUndefined Boolean
33 , noTco :: NullOrUndefined Boolean
34 , verboseErrors :: NullOrUndefined Boolean
35 , output :: NullOrUndefined String
38 instance isForeignOptions :: IsForeign Options where
39 read obj = (\a b c d e f ->
40 Options { noPrelude: a
46 }) <$> readProp noPreludeOpt obj
47 <*> readProp noOptsOpt obj
48 <*> readProp noMagicDoOpt obj
49 <*> readProp noTcoOpt obj
50 <*> readProp verboseErrorsOpt obj
51 <*> readProp outputOpt obj
53 booleanOpt :: String -> NullOrUndefined Boolean -> [String]
54 booleanOpt key opt = maybe [] (\a -> if a then ["--" ++ key] else []) (runNullOrUndefined opt)
56 stringOpt :: String -> NullOrUndefined String -> [String]
57 stringOpt key opt = maybe [] (\a -> ["--" ++ key ++ "=" ++ a]) (runNullOrUndefined opt)
59 pscMakeOutputOption :: Foreign -> Maybe String
60 pscMakeOutputOption query = either (const Nothing)
61 (\(Options a) -> runNullOrUndefined a.output)
64 pscMakeOptions :: Foreign -> [String]
65 pscMakeOptions query = either (const []) fold parsed
66 where parsed = read query :: F Options
67 fold (Options a) = booleanOpt noPreludeOpt a.noPrelude <>
68 booleanOpt noOptsOpt a.noOpts <>
69 booleanOpt noMagicDoOpt a.noMagicDo <>
70 booleanOpt noTcoOpt a.noTco <>
71 booleanOpt verboseErrorsOpt a.verboseErrors <>
72 stringOpt outputOpt a.output