diff --git a/exe/Options.idr b/exe/Options.idr index 58b545b..7698730 100644 --- a/exe/Options.idr +++ b/exe/Options.idr @@ -7,6 +7,7 @@ import System.File import System.Term import Derive.Prelude +%default total %language ElabReflection public export @@ -63,20 +64,14 @@ toOutFile "" = Ok {outFile := None} toOutFile "-" = Ok {outFile := Stdout} toOutFile f = Ok {outFile := File f} -private -phaseName : Phase -> String -phaseName Parse = "parse" -phaseName Check = "check" -phaseName Erase = "erase" - private toPhase : String -> OptAction -toPhase str = case toLower str of - "parse" => Ok {until := Just Parse} - "check" => Ok {until := Just Check} - "erase" => Ok {until := Just Erase} - _ => Err "unknown phase name \{show str}\nphases: \{phaseNames}" -where phaseNames = joinBy ", " $ map phaseName allPhases +toPhase str = + let lstr = toLower str in + case find (\p => toLower (show p) == lstr) allPhases of + Just p => Ok {until := Just p} + Nothing => Err "unknown phase name \{show str}\nphases: \{phaseNames}" +where phaseNames = joinBy ", " $ map (toLower . show) allPhases private toWidth : String -> OptAction