, lastFuelPassInState, fuelExhaustedInState, fuelRemainingInState
, fuelDecrementState
, runFuel, runFuelIO, runFuelWithLastPass, fuelConsumingPass
+ , runWithInfiniteFuel
, FuelMonad(..)
)
where
-import GHC.Prim
+--import GHC.Exts (State#)
import Panic
import Data.IORef
diffFuel _ _ = 0
#endif
--- stop warnings about things that aren't used
-_unused :: State# () -> FS.FastString
-_unused = undefined panic
-
-
data FuelState = FuelState { fs_fuellimit :: OptimizationFuel, fs_lastpass :: String }
newtype FuelMonad a = FuelMonad (FuelState -> (a, FuelState))
runFuel :: FuelMonad a -> FuelConsumer a
runFuelWithLastPass :: FuelMonad a -> FuelConsumer (a, String)
+runWithInfiniteFuel :: FuelMonad a -> a
+
runFuelIO :: IORef String -> IORef OptimizationFuel -> FuelMonad a -> IO a
runFuelIO pass_ref fuel_ref (FuelMonad f) =
runFuelWithLastPass (FuelMonad f) fuel = let (a, s) = f $ initialFuelState fuel
in ((a, fs_lastpass s), fs_fuellimit s)
+runWithInfiniteFuel (FuelMonad f) = fst $ f $ initialFuelState $ tankFilledTo maxBound
+
lastFuelPassInState :: FuelState -> String
lastFuelPassInState = fs_lastpass