linearscan-0.2.0.0: LinearScan/IState.hs
module LinearScan.IState where
import qualified Prelude
import qualified Data.IntMap
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)
ierr :: a1 -> IState a1 a2 a3 a4
ierr err x =
Prelude.Left err
iget :: IState a1 a2 a2 a2
iget i =
Prelude.Right ((,) i i)
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'}}