@@ -608,13 +608,39 @@ logLevel = do i <- getIState
608608setErrContext :: Bool -> Idris ()
609609setErrContext t = do i <- getIState
610610 let opts = idris_options i
611− let opt' = opts { opt_errContext = t }
612− putIState $ i { idris_options = opt' }
611+ let opts' = opts { opt_errContext = t }
612+ putIState $ i { idris_options = opts' }
613613
614614errContext :: Idris Bool
615615errContext = do i <- getIState
616616 return (opt_errContext (idris_options i))
617617
618+getOptimise :: Idris [Optimisation]
619+getOptimise = do i <- getIState
620+ return (opt_optimise (idris_options i))
621+
622+setOptimise :: [Optimisation] -> Idris ()
623+setOptimise newopts = do i <- getIState
624+ let opts = idris_options i
625+ let opts' = opts { opt_optimise = newopts }
626+ putIState $ i { idris_options = opts' }
627+
628+addOptimise :: Optimisation -> Idris ()
629+addOptimise opt = do opts <- getOptimise
630+ setOptimise (nub (opt : opts))
631+
632+removeOptimise :: Optimisation -> Idris ()
633+removeOptimise opt = do opts <- getOptimise
634+ setOptimise ((nub opts) \\ [opt])
635+
636+-- Set appropriate optimisation set for the given level. We only have
637+-- one optimisation that is configurable at the moment, however!
638+setOptLevel :: Int -> Idris ()
639+setOptLevel n | n <= 0 = setOptimise []
640+setOptLevel 1 = setOptimise []
641+setOptLevel 2 = setOptimise [PETransform]
642+setOptLevel n | n >= 3 = setOptimise [PETransform]
643+
618644useREPL :: Idris Bool
619645useREPL = do i <- getIState
620646 return (opt_repl (idris_options i))
@@ -708,16 +734,6 @@ targetCPU :: Idris String
708734targetCPU = do i <- getIState
709735 return (opt_cpu (idris_options i))
710736
711−setOptLevel :: Word -> Idris ()
712−setOptLevel t = do i <- getIState
713− let opts = idris_options i
714− opt' = opts { opt_optLevel = t }
715− putIState $ i { idris_options = opt' }
716−
717−optLevel :: Idris Word
718−optLevel = do i <- getIState
719− return (opt_optLevel (idris_options i))
720−
721737verbose :: Idris Bool
722738verbose = do i <- getIState
723739 return (opt_verbose (idris_options i))