1
1
mirror of https://github.com/anoma/juvix.git synced 2024-12-20 13:21:47 +03:00
juvix/app/Commands/Dev/Core/Read/Options.hs

68 lines
2.0 KiB
Haskell
Raw Normal View History

2022-09-14 17:16:15 +03:00
module Commands.Dev.Core.Read.Options where
2022-10-21 20:13:06 +03:00
import Commands.Dev.Core.Eval.Options qualified as Eval
2022-09-14 17:16:15 +03:00
import CommonOptions
import Evaluator qualified
2022-09-14 17:16:15 +03:00
import Juvix.Compiler.Core.Data.TransformationId.Parser
import Juvix.Compiler.Core.Pretty.Options qualified as Core
data CoreReadOptions = CoreReadOptions
{ _coreReadTransformations :: [TransformationId],
_coreReadShowDeBruijn :: Bool,
2022-10-21 20:13:06 +03:00
_coreReadEval :: Bool,
_coreReadNoPrint :: Bool,
2022-09-14 17:16:15 +03:00
_coreReadInputFile :: Path
}
deriving stock (Data)
makeLenses ''CoreReadOptions
instance CanonicalProjection CoreReadOptions Core.Options where
project c =
Core.defaultOptions
{ Core._optShowDeBruijnIndices = c ^. coreReadShowDeBruijn
}
2022-10-21 20:13:06 +03:00
instance CanonicalProjection CoreReadOptions Eval.CoreEvalOptions where
project c =
Eval.CoreEvalOptions
{ _coreEvalNoIO = False,
_coreEvalInputFile = c ^. coreReadInputFile,
_coreEvalShowDeBruijn = c ^. coreReadShowDeBruijn
}
instance CanonicalProjection CoreReadOptions Evaluator.EvalOptions where
project x =
Evaluator.EvalOptions
{ _evalNoIO = False,
_evalInputFile = x ^. coreReadInputFile
}
2022-09-14 17:16:15 +03:00
parseCoreReadOptions :: Parser CoreReadOptions
parseCoreReadOptions = do
_coreReadShowDeBruijn <- optDeBruijn
2022-10-21 20:13:06 +03:00
_coreReadNoPrint <-
switch
( long "no-print"
<> help "do not print the transformed code"
)
_coreReadEval <-
switch
( long "eval"
<> help "evaluate after the transformation"
)
2022-09-14 17:16:15 +03:00
_coreReadTransformations <-
option
(eitherReader parseTransf)
( long "transforms"
<> short 't'
<> value mempty
<> metavar "[Transform]"
<> help "comma sep list of transformations. Available: lifting, top-eta-expand, identity"
2022-09-14 17:16:15 +03:00
)
_coreReadInputFile <- parseInputJuvixCoreFile
2022-09-14 17:16:15 +03:00
pure CoreReadOptions {..}
where
parseTransf :: String -> Either String [TransformationId]
parseTransf = mapLeft unpack . parseTransformations . pack