module Bind.Marshal.Action.Monad.Static where
import Bind.Marshal.Prelude
import Bind.Marshal.Action.Base
import Bind.Marshal.Action.Static
import Bind.Marshal.DataModel
import GHC.Exts ( inline )
instance ( m ~ D0
)
=> Return (StaticMemAction tag m)
where
returnM !v = StaticMemAction ( \ eval_cont _fail_cont -> eval_cont v )
static_return :: a -> StaticMemAction tag D0 a
static_return !v = StaticMemAction ( \ eval_cont _fail_cont -> eval_cont v )
instance Fail ( StaticMemAction tag
m
)
where
fail !err_txt = StaticMemAction ( \ _eval_cont fail_cont !_p -> fail_cont err_txt )
instance ( size_2 ~ Add size_0 size_1
, buffer_0 ~ buffer_1
, buffer_0 ~ buffer_2
) => Bind (StaticMemAction buffer_0 size_0)
(StaticMemAction buffer_1 size_1)
(StaticMemAction buffer_2 size_2)
where
(>>=) (StaticMemAction ma) fmb
= StaticMemAction
( \ eval_cont fail_cont
-> ma (\ !v -> case (fmb v) of
StaticMemAction mb -> mb eval_cont fail_cont
)
fail_cont
)
(>>) (StaticMemAction ma) (StaticMemAction mb)
= StaticMemAction ( \ eval_cont fail_cont -> ma (\ !v -> mb eval_cont fail_cont )
fail_cont
)