Optimisation fuel is used to control the amount of work the optimiser does.
Every optimisation step consumes a certain amount of fuel and stops when it runs out of fuel. This can be used e.g. to debug optimiser bugs: Run the optimiser with varying amount of fuel to find out the exact number of steps where a bug is introduced in the output.
Documentation
data OptFuelState Source
type FuelConsumer a = OptimizationFuel -> (a, OptimizationFuel)Source
class Monad m => FuelUsingMonad m whereSource
fuelGet :: m OptimizationFuelSource
fuelSet :: OptimizationFuel -> m ()Source
lastFuelPass :: m StringSource
setFuelPass :: String -> m ()Source
fuelExhausted :: FuelUsingMonad m => m BoolSource
fuelDec1 :: FuelUsingMonad m => m ()Source
tryWithFuel :: FuelUsingMonad m => a -> m (Maybe a)Source
runFuelIO :: OptFuelState -> FuelUniqSM a -> IO aSource
runInfiniteFuelIO :: OptFuelState -> FuelUniqSM a -> IO aSource
fuelConsumingPass :: String -> FuelConsumer a -> FuelUniqSM aSource
data FuelUniqSM a Source
liftUniq :: UniqSM x -> FuelUniqSM xSource