module LinearScan.IState where import Debug.Trace (trace, traceShow) import qualified Prelude import qualified Data.IntMap import qualified Data.IntSet import qualified Data.List import qualified Data.Ord import qualified Data.Functor.Identity import qualified LinearScan.Utils type IState errType i o a = i -> Prelude.Either errType ((,) a o) iput :: a3 -> IState a1 a2 a3 () iput x x0 = Prelude.Right ((,) () x) imap :: (a4 -> a5) -> (IState a1 a2 a3 a4) -> IState a1 a2 a3 a5 imap f x st = case x st of { Prelude.Left err -> Prelude.Left err; Prelude.Right p -> case p of { (,) a st' -> Prelude.Right ((,) (f a) st')}} ipure :: a3 -> IState a1 a2 a2 a3 ipure x st = Prelude.Right ((,) x st) ijoin :: (IState a1 a2 a3 (IState a1 a3 a4 a5)) -> IState a1 a2 a4 a5 ijoin x st = case x st of { Prelude.Left err -> Prelude.Left err; Prelude.Right p -> case p of { (,) y st' -> y st'}}