bind-marshal-0.1: test/verify_data_model_proto.hs
-- Copyright : (C) 2009 Corey O'Connor
-- License : BSD-style (see the file LICENSE)
-- The current ghc compiler is not capable of solving some tests within a reasonable time.
#define ONLY_SMALL_CASES 1
{-# LANGUAGE RankNTypes #-}
import Bind.Marshal.Prelude
import Bind.Marshal.Verify
import qualified Control.Monad
-- | an empty data model
data DMNil
-- | An indivisible buffer static action.
data BSUnit rep
-- | A tag that indicates the child action is statically replicated
data Pos n => SReplicate n action
-- | A static sequence of buffer static actions.
data family BSSeq action bs_seq
-- | Which can be a unit action followed by a sequence.
data instance BSSeq (BSUnit rep) bs_seq
= BSUnitSeq rep bs_seq
-- | a replicated buffer static action followed by a sequence.
data instance BSSeq (SReplicate n (BSSeq action bs_seq_0)) bs_seq_1
= BSSeqReplicate n (BSSeq action bs_seq_0) bs_seq_1
-- A non-replicated sequence cannot be a node in a buffer static sequence. When a non-replicated
-- sequence is appended to a buffer static sequence the buffer static sequence takes the place of
-- the DMNil tail of the non-replicated sequence.
--
-- | A dynamic unit action is a static buffer action with no assurance on the number of times the
-- entire action is replicated.
data DynUnit rep
-- | A dynamic sequence is a sequence of static buffer actions with no assurance on the number of
-- times the entire action is replicated.
data family DynSeq action seq
-- | Which can be a buffer static unit action followed by a sequence
data instance DynSeq (BSUnit rep) seq
= DynBSUnitSeq rep seq
-- | A replicated buffer static unit action followed by a sequence
data instance DynSeq (SReplicate n (BSUnit rep)) seq
= DynBSUnitReplicate n rep seq
-- | A buffer static action followed by a sequence
data instance DynSeq (BSSeq action bs_seq) seq
= DynBSSeq action bs_seq seq
-- | A dynamic unit action followed by a sequence
data instance DynSeq (DynUnit action) seq
= DynUnitSeq action seq
-- | A statically replicated dynamic unit action.
data instance DynSeq (SReplicate n (DynUnit rep)) seq
= DynUnitReplicate n rep seq
-- | A dynamic action followed by a sequence
data instance DynSeq (DynSeq action seq_0) seq_1
= DynSeq (DynSeq action seq_0) seq_1
-- | A statically replicated dynamic action followed by a sequence
data instance DynSeq (SReplicate n (DynSeq action seq_0)) seq_1
= DynReplicate n action seq_0 seq_1
-- | Two data models can be appended together.
-- The resulting data model is the first data model's action sequence followed by the second data
-- model's action sequence. The final data model is dynamic or static as required by the rules
-- below.
--
-- These equations also normalizes the data models if required.
type family DMApp dm_0 dm_1
type instance DMApp DMNil dm_1 = dm_1
type instance DMApp dm_0 DMNil = dm_0
-- The rules all follow: if a static model is appended to a static model the result is also a static
-- model.
--
-- The non-replicated static buffer actions cases:
-- - unit action appended to unit action
type instance DMApp (BSUnit a_0) (BSUnit a_1)
= BSSeq (BSUnit a_0) (BSSeq (BSUnit a_1) DMNil)
dmapp_sunit_sunit :: DMApp (BSUnit rep) (BSUnit rep)
dmapp_sunit_sunit = BSUnitSeq undefined (BSUnitSeq undefined undefined)
-- - unit action appended to static sequence
type instance DMApp (BSUnit a_0) (BSSeq a_1 bs_seq)
= BSSeq (BSUnit a_0) (BSSeq a_1 bs_seq)
dmapp_bsunit_bsseq :: DMApp (BSUnit rep) (BSSeq (BSUnit rep) DMNil)
dmapp_bsunit_bsseq = BSUnitSeq undefined (BSUnitSeq undefined undefined)
dmapp_bsunit_bsseq_1 :: DMApp (BSUnit rep) (BSSeq (BSUnit rep) (BSSeq (BSUnit rep) DMNil))
dmapp_bsunit_bsseq_1 = BSUnitSeq undefined (BSUnitSeq undefined (BSUnitSeq undefined undefined))
-- - static sequence appended to unit action
type instance DMApp (BSSeq a_0 bs_seq) (BSUnit a_1)
= BSSeq a_0 (DMApp bs_seq (BSSeq (BSUnit a_1) DMNil))
dmapp_bsseq_bsunit :: DMApp (BSSeq (BSUnit rep) DMNil) (BSUnit rep)
dmapp_bsseq_bsunit = BSUnitSeq undefined (BSUnitSeq undefined undefined)
-- - static sequence appended to static sequence
type instance DMApp (BSSeq a_0 bs_seq_0) (BSSeq a_1 bs_seq_1)
= BSSeq a_0 (DMApp bs_seq_0 (BSSeq a_1 bs_seq_1))
dmapp_bsseq_bsseq :: DMApp (BSSeq (BSUnit rep) DMNil) (BSSeq (BSUnit rep) DMNil)
dmapp_bsseq_bsseq = BSUnitSeq undefined (BSUnitSeq undefined undefined)
dmapp_bsseq_bsseq_1 :: DMApp (BSSeq (BSUnit rep) DMNil) (BSSeq (BSUnit rep) (BSSeq (BSUnit rep) DMNil))
dmapp_bsseq_bsseq_1 = BSUnitSeq undefined (BSUnitSeq undefined (BSUnitSeq undefined undefined))
-- In the case of replicated static buffer actions
-- - replicated unit action appended to unit action
type instance DMApp (SReplicate n (BSUnit a_0)) (BSUnit a_1)
= BSSeq (SReplicate n (BSSeq (BSUnit a_0) DMNil))
(BSSeq (BSUnit a_1) DMNil)
dmapp_rep_sunit_sunit :: DMApp (SReplicate D245 (BSUnit rep)) (BSUnit rep)
dmapp_rep_sunit_sunit = BSSeqReplicate undefined undefined (BSUnitSeq undefined undefined)
-- - replicated unit action appended to static sequence
type instance DMApp (SReplicate n (BSUnit a_0)) (BSSeq a_1 bs_seq)
= BSSeq (SReplicate n (BSSeq (BSUnit a_0) DMNil))
(BSSeq a_1 bs_seq)
dmapp_rep_bsunit_bsseq :: DMApp (SReplicate D4 (BSUnit rep_0)) (BSSeq (BSUnit rep_1) DMNil)
dmapp_rep_bsunit_bsseq = BSSeqReplicate undefined undefined (BSUnitSeq undefined undefined)
dmapp_rep_bsunit_bsseq_1 :: DMApp (SReplicate D4 (BSUnit rep_0)) (DMApp (BSUnit rep_1) (BSUnit rep2))
dmapp_rep_bsunit_bsseq_1 = BSSeqReplicate undefined undefined (BSUnitSeq undefined undefined)
-- - replicated unit action appended to replicated static sequence
type instance DMApp (SReplicate n_0 (BSUnit a_0)) (SReplicate n_1 (BSSeq a_1 bs_seq))
= BSSeq (SReplicate n_0 (BSSeq (BSUnit a_0) DMNil))
(BSSeq (SReplicate n_1 (BSSeq a_1 bs_seq)) DMNil)
dmapp_rep_bsunit_rep_bsseq :: DMApp (SReplicate D2 (BSUnit rep))
(SReplicate D200 (BSSeq (BSUnit rep)
(BSSeq (BSUnit rep) DMNil)
)
)
dmapp_rep_bsunit_rep_bsseq = BSSeqReplicate undefined undefined
(BSSeqReplicate undefined undefined undefined)
dmapp_rep_bsunit_rep_bsseq_1 :: DMApp (SReplicate D2 (BSUnit rep))
(SReplicate D200 (DMApp (BSUnit rep)
(DMApp (BSUnit rep) (BSUnit rep))
)
)
dmapp_rep_bsunit_rep_bsseq_1 = BSSeqReplicate undefined undefined
(BSSeqReplicate undefined (BSUnitSeq undefined (BSUnitSeq undefined undefined)) undefined)
-- - unit action appended to replicated unit action
type instance DMApp (BSUnit a_0) (SReplicate n (BSUnit a_1))
= BSSeq (BSUnit a_0)
(BSSeq (SReplicate n (BSSeq (BSUnit a_1) DMNil)) DMNil)
dmapp_sunit_rep_sunit :: DMApp (BSUnit rep) (SReplicate D212 (BSUnit rep))
dmapp_sunit_rep_sunit = BSUnitSeq undefined (BSSeqReplicate undefined undefined undefined)
-- - unit action appended to replicated static sequence
type instance DMApp (BSUnit a_0) (SReplicate n (BSSeq a_1 bs_seq))
= BSSeq (BSUnit a_0)
(BSSeq (SReplicate n (BSSeq a_1 bs_seq)) DMNil)
dmapp_bsunit_rep_bsseq :: DMApp (BSUnit rep) (SReplicate D200 (BSSeq (BSUnit rep) DMNil))
dmapp_bsunit_rep_bsseq = BSUnitSeq undefined (BSSeqReplicate undefined undefined undefined)
dmapp_bsunit_rep_bsseq_1 :: DMApp (BSUnit rep) (SReplicate D200 (DMApp (BSUnit rep) (BSUnit rep)))
dmapp_bsunit_rep_bsseq_1 = BSUnitSeq undefined (BSSeqReplicate undefined undefined undefined)
dmapp_bsunit_rep_bsseq_2 :: DMApp (BSUnit rep) (SReplicate D200 (DMApp (BSUnit rep) (DMApp (BSUnit rep) (BSUnit rep))))
dmapp_bsunit_rep_bsseq_2 = BSUnitSeq undefined (BSSeqReplicate undefined undefined undefined)
-- - static sequence appended to replicated unit action
type instance DMApp (BSSeq a_0 bs_seq_0) (SReplicate n_1 (BSUnit a_1))
= BSSeq a_0 (DMApp bs_seq_0
(BSSeq (SReplicate n_1 (BSSeq (BSUnit a_1) DMNil))
DMNil
)
)
dmapp_bsseq_rep_sunit :: DMApp (DMApp (BSUnit rep_0) (BSUnit rep_1))
(SReplicate n_1 (BSUnit rep_2))
dmapp_bsseq_rep_sunit = BSUnitSeq undefined (BSUnitSeq undefined undefined )
dmapp_bsseq_rep_sunit_1 :: DMApp (BSSeq (BSUnit rep_0) (BSSeq (BSUnit rep_1) DMNil))
(SReplicate n_1 (BSUnit rep_2))
dmapp_bsseq_rep_sunit_1 = BSUnitSeq undefined (BSUnitSeq undefined undefined )
dmapp_bsseq_rep_sunit_2 :: BSSeq (BSUnit rep_0)
(DMApp (BSUnit rep_1)
(SReplicate n_1 (BSUnit rep_2))
)
dmapp_bsseq_rep_sunit_2 = BSUnitSeq undefined (BSUnitSeq undefined (BSSeqReplicate undefined undefined undefined))
dmapp_bsseq_rep_sunit_3 :: DMApp (DMApp (BSUnit rep_0) (BSUnit rep_1))
(SReplicate n_1 (BSUnit rep_2))
dmapp_bsseq_rep_sunit_3 = BSUnitSeq undefined (BSUnitSeq undefined (BSSeqReplicate undefined undefined undefined))
-- - static sequence appended to replicated static sequence
type instance DMApp (BSSeq a_0 bs_seq_0) (SReplicate n_1 (BSSeq a_1 bs_seq_1))
= BSSeq a_0 (DMApp bs_seq_0
(BSSeq (SReplicate n_1 (BSSeq a_1 bs_seq_1))
DMNil
)
)
dmapp_bsseq_rep_bsseq :: DMApp (DMApp (BSUnit rep_0) (BSUnit rep_1))
(SReplicate D200 (DMApp (BSUnit rep_2)
(BSUnit rep_3)
)
)
dmapp_bsseq_rep_bsseq = BSUnitSeq undefined (BSUnitSeq undefined (BSSeqReplicate undefined undefined undefined))
dmapp_bsseq_rep_bsseq_1 :: DMApp (DMApp (BSUnit rep_0) (DMApp (BSUnit rep_1) (BSUnit rep_3)))
(SReplicate D200 (DMApp (BSUnit rep_4)
(DMApp (BSUnit rep_5)
(BSUnit rep_6)
)
)
)
dmapp_bsseq_rep_bsseq_1 = BSUnitSeq undefined
(BSUnitSeq undefined
(BSUnitSeq undefined
(BSSeqReplicate undefined (BSUnitSeq undefined (BSUnitSeq undefined (BSUnitSeq undefined undefined)))
undefined
)
)
)
-- - replicated static sequence appended to unit action
type instance DMApp (SReplicate n_0 (BSSeq a_0 bs_seq_0)) (BSUnit a_1)
= BSSeq (SReplicate n_0 (BSSeq a_0 bs_seq_0))
(BSSeq (BSUnit a_1) DMNil)
dmapp_rep_bsseq_bsunit :: DMApp (SReplicate n (DMApp (BSUnit rep) (BSUnit rep)))
(BSUnit rep)
dmapp_rep_bsseq_bsunit = undefined
dmapp_rep_bsseq_bsunit_1 :: DMApp (SReplicate n (DMApp (BSUnit rep) (BSUnit rep)))
(BSUnit rep)
dmapp_rep_bsseq_bsunit_1 = BSSeqReplicate undefined (BSUnitSeq undefined (BSUnitSeq undefined undefined))
(BSUnitSeq undefined undefined)
-- - replicated static sequence appended to static sequence
type instance DMApp (SReplicate n_0 (BSSeq a_0 bs_seq_0)) (BSSeq a_1 bs_seq_1)
= BSSeq (SReplicate n_0 (BSSeq a_0 bs_seq_0))
(BSSeq a_1 bs_seq_1)
dmapp_rep_bsseq_bsseq :: DMApp (SReplicate n (DMApp (BSUnit rep) (BSUnit rep)))
(DMApp (BSUnit rep) (BSUnit rep))
dmapp_rep_bsseq_bsseq = BSSeqReplicate undefined (BSUnitSeq undefined (BSUnitSeq undefined undefined))
(BSUnitSeq undefined (BSUnitSeq undefined undefined))
-- - replicated static sequence appended to replicate unit action
type instance DMApp (SReplicate n_0 (BSSeq a_0 bs_seq_0)) (SReplicate n_1 (BSUnit a_1))
= BSSeq (SReplicate n_0 (BSSeq a_0 bs_seq_0))
(BSSeq (SReplicate n_1 (BSSeq (BSUnit a_1) DMNil)) DMNil)
dmapp_rep_bsseq_rep_unit :: DMApp (SReplicate n_0 (DMApp (BSUnit rep) (BSUnit rep)))
(SReplicate n_1 (BSUnit rep))
dmapp_rep_bsseq_rep_unit = BSSeqReplicate undefined (BSUnitSeq undefined (BSUnitSeq undefined undefined))
(BSSeqReplicate undefined (BSUnitSeq undefined undefined) undefined)
-- - replicated unit action appended to replicated unit action
type instance DMApp (SReplicate n_0 (BSUnit a_0)) (SReplicate n_1 (BSUnit a_1))
= BSSeq (SReplicate n_0 (BSSeq (BSUnit a_0) DMNil))
(BSSeq (SReplicate n_1 (BSSeq (BSUnit a_1) DMNil)) DMNil)
dmapp_rep_sunit_rep_sunit :: DMApp (SReplicate D245 (BSUnit rep)) (SReplicate D212 (BSUnit rep))
dmapp_rep_sunit_rep_sunit = BSSeqReplicate undefined undefined (BSSeqReplicate undefined undefined undefined)
-- - replicated static sequence appended to replicated static sequence
type instance DMApp (SReplicate n_0 (BSSeq a_0 bs_seq_0)) (SReplicate n_1 (BSSeq a_1 bs_seq_1))
= BSSeq (SReplicate n_0 (BSSeq a_0 bs_seq_0))
(BSSeq (SReplicate n_1 (BSSeq a_1 bs_seq_1)) DMNil)
dmapp_rep_bsseq_rep_bsseq :: DMApp (SReplicate n_0 (DMApp (BSUnit r_0) (BSUnit r_1)))
(SReplicate n_1 (DMApp (BSUnit r_2) (BSUnit r_3)))
dmapp_rep_bsseq_rep_bsseq = BSSeqReplicate undefined (BSUnitSeq undefined (BSUnitSeq undefined undefined))
(BSSeqReplicate undefined (BSUnitSeq undefined (BSUnitSeq undefined undefined)) undefined)
dmapp_rep_bsunit_rep_bsseq_2 :: DMApp (SReplicate D2 (BSUnit rep))
(DMApp (SReplicate D200
(DMApp (BSUnit rep)
(DMApp (BSUnit rep) (BSUnit rep))
)
)
(SReplicate D20 (BSUnit rep))
)
dmapp_rep_bsunit_rep_bsseq_2 = BSSeqReplicate undefined undefined
(BSSeqReplicate undefined (BSUnitSeq undefined (BSUnitSeq undefined undefined))
(BSSeqReplicate undefined undefined undefined)
)
#if 0
-- For dynamic models the rules all follow: If a dynamic model is appended to dynamic model the
-- result is also a dynamic model.
--
-- The non-replicated cases:
-- - a dynamic unit appended to a dynamic unit
type instance DMApp (DynUnit a_0) (DynUnit a_1)
= DynSeq (DynUnit a_0) (DynSeq (DynUnit a_1) DMNil)
dmapp_unit_unit :: DMApp (DynUnit rep) (DynUnit rep)
dmapp_unit_unit = undefined
-- - a dynamic unit appended to a dynamic sequence
-- - where the sequence starts with a unit
dmapp_unit_seq :: DMApp (DynUnit rep) (DynSeq action seq)
dmapp_unit_seq = undefined
-- For dynamic models the rules are:
-- if a dynamic model is appended to dynamic model the result is also a dynamic model
type instance DMApp (DBUnit a_0) (DBUnit a_1)
= DBAction (DBUnit a_0) (DBUnit a_1)
type instance DMApp (DBUnit a) (DBAction d_a d_as)
= DBAction (DBUnit a) (DBAction d_a d_as)
type instance DMApp (DBAction s_a s_as) (DBUnit a)
= DBAction s_a (DMApp s_as (DBUnit a))
type instance DMApp (DBAction s_as_0 d_as_0) (DBAction s_as_1 d_as_1)
= DBAction s_as_0 (DMApp d_as_0 (DBAction s_as_1 d_as_1))
-- if a static model is appended to a dynamic model the result is a dynamic model
type instance DMApp (DBUnit a_0) (BSUnit a_1)
= DBAction (DBUnit a_0) (BSUnit a_1)
type instance DMApp (DBAction (DBUnit a_0) (BSUnit a_1)) (BSUnit a_2)
= DBAction (DBUnit a_0) (BSSeq (BSUnit a_1) (BSUnit a_2))
type instance DMApp (DBAction (DBUnit a_0) (BSSeq a_1 s_as)) (BSUnit a_2)
= DBAction (DBUnit a_0) (DMApp (BSSeq a_1 s_as) (BSUnit a_2))
type instance DMApp (DBAction (DBUnit a_0) (DBUnit a_1)) (BSUnit a_2)
= DBAction (DBUnit a_0) (DBAction (DBUnit a_1) (BSUnit a_2))
type instance DMApp (DBAction (DBUnit a_0) (DBAction a_1 d_as_1)) (BSUnit a_2)
= DBAction (DBUnit a_0) (DMApp (DBAction a_1 d_as_1) (BSUnit a_2))
type instance DMApp (DBAction (BSUnit a_0) (DBUnit a_1)) (BSUnit a_2)
= DBAction (BSUnit a_0) (DBAction (DBUnit a_1) (BSUnit a_2))
type instance DMApp (DBAction (BSUnit a_0) (DBAction a_1 d_as_1)) (BSUnit a_2)
= DBAction (BSUnit a_0) (DMApp (DBAction a_1 d_as_1) (BSUnit a_2))
type instance DMApp (DBAction (BSSeq a_0 s_a_0) (DBUnit a_1)) (BSUnit a_2)
= DBAction (BSSeq a_0 s_a_0) (DBAction (DBUnit a_1) (BSUnit a_2))
type instance DMApp (DBAction (BSSeq a_0 s_a_0) (DBAction a_1 d_a_1)) (BSUnit a_2)
= DBAction (BSSeq a_0 s_a_0) (DMApp (DBAction a_1 d_a_1) (BSUnit a_2))
type instance DMApp (DBAction (DBUnit a_0) (DBUnit a_1)) (BSSeq a_2 s_as_2)
= DBAction (DBUnit a_0) (DBAction (DBUnit a_1) (BSSeq a_2 s_as_2))
type instance DMApp (DBAction (DBUnit a_0) (DBAction a_1 d_as_1)) (BSSeq a_2 s_as_2)
= DBAction (DBUnit a_0) (DMApp (DBAction a_1 d_as_1) (BSSeq a_2 s_as_2))
type instance DMApp (DBAction (DBUnit a_0) (BSUnit a_1)) (BSSeq a_2 s_as_2)
= DBAction (DBUnit a_0) (DMApp (BSUnit a_1) (BSSeq a_2 s_as_2))
type instance DMApp (DBAction (DBUnit a_0) (BSSeq a_1 s_as_1)) (BSSeq a_2 s_as_2)
= DBAction (DBUnit a_0) (DMApp (BSSeq a_1 s_as_1) (BSSeq a_2 s_as_2))
type instance DMApp (DBAction (BSUnit a_0) (DBUnit a_1)) (BSSeq a_2 s_as_2)
= DBAction (BSUnit a_0) (DBAction (DBUnit a_1) (BSSeq a_2 s_as_2))
type instance DMApp (DBAction (BSUnit a_0) (DBAction a_1 d_as_1)) (BSSeq a_2 s_as_2)
= DBAction (BSUnit a_0) (DMApp (DBAction a_1 d_as_1) (BSSeq a_2 s_as_2))
type instance DMApp (DBAction (BSSeq a_0 s_as_0) (DBUnit a_1)) (BSSeq a_2 s_as_2)
= DBAction (BSSeq a_0 s_as_0) (DBAction (DBUnit a_1) (BSSeq a_2 s_as_2))
type instance DMApp (DBAction (BSSeq a_0 s_as_0) (DBAction a_1 d_as_1)) (BSSeq a_2 s_as_2)
= DBAction (BSSeq a_0 s_as_0) (DMApp (DBAction a_1 d_as_1) (BSSeq a_2 s_as_2))
type instance DMApp (BSUnit a_0) (DBUnit a_1)
= DBAction (BSUnit a_0) (DBUnit a_1)
type instance DMApp (BSSeq a_0 s_as_0) (DBUnit a_1)
= DBAction (BSSeq a_0 s_as_0) (DBUnit a_1)
-- Examining only the types of some example cases.
--
-- sb >> sb
t_0 :: BSSeq a (BSUnit a)
t_0 = undefined
-- sb >> ( forM_ [1..4] $ \i -> sb )
t_1 :: DBAction (BSUnit a) -- for the sb >>
(BSUnit a) -- for iterated "\i -> sb"
t_1 = undefined
-- forM_ [1..4] $ \i -> sb
t_2 :: DBAction (BSUnit a) DMNil
t_2 = undefined
-- ( forM_ [1..4] $ \i -> sb ) >> sb
t_3 :: DBAction (BSUnit a) -- for iterated "\i -> sb"
(BSUnit a) -- for ">> sb"
t_3 = undefined
-- Now start examining monads expressing only static buffer actions.
--
-- Introduce a dummy static buffer unit action:
data DummyAction
sb :: ( tModel' ~ DMApp tModel (BSUnit DummyAction)
) => DMAction tModel () tModel' () ()
sb = undefined
t_sb_0 :: DMAction DMNil () (BSUnit DummyAction) () ()
t_sb_0 = sb
type instance DMApp DMNil dm = dm
type instance DMApp dm DMNil = dm
t_sb_1 :: DMAction DMNil ()
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
) ()
()
t_sb_1 = sb >> sb
instance ( model_0 ~ model_4
, model_1 ~ model_2
, model_3 ~ model_5
) => Bind (DMAction model_0 run_state_0 model_1 run_state_1)
(DMAction model_2 run_state_2 model_3 run_state_3)
(DMAction model_4 run_state_4 model_5 run_state_5)
where
(>>=) = undefined
t_sb_2 :: DMAction DMNil ()
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
) ()
()
t_sb_2 = sb >> sb >> sb
#if 0
*Main> :info t_sb_2'
t_sb_2' ::
DMAction
tModel
run_state_4
(DMApp
(DMApp (DMApp tModel (BSUnit DummyAction)) (BSUnit DummyAction))
(BSUnit DummyAction))
run_state_5
()
#endif
t_sb_2' = sb >> sb >> sb
t_sb_3 :: DMAction DMNil ()
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
) ()
()
t_sb_3 = sb >> sb >> sb >> sb
t_sb_3' = sb >> sb >> sb >> sb
-- A dynamic buffer action
db :: ( tModel' ~ DMApp tModel (DBUnit DummyAction)
) => DMAction tModel () tModel' () ()
db = undefined
t_db_0 :: DMAction DMNil ()
(DBUnit DummyAction) ()
()
t_db_0 = db
t_db_1 :: DMAction DMNil ()
(DBAction (DBUnit DummyAction)
(DBUnit DummyAction)
) ()
()
t_db_1 = db >> db
t_db_2 :: DMAction DMNil ()
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBUnit DummyAction)
)
)
()
()
t_db_2 = db >> db >> db
t_db_3 :: DMAction DMNil ()
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBUnit DummyAction)
)
)
)
()
()
t_db_3 = db >> db >> db >> db
t_db_3' = db >> db >> db >> db
t_db_0_sb_0 :: DMAction DMNil () (DBAction (DBUnit DummyAction) (BSUnit DummyAction)) () ()
t_db_0_sb_0 = db >> sb
t_db_1_sb_0 :: DMAction DMNil ()
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSUnit DummyAction)
)
) ()
()
t_db_1_sb_0 = db >> db >> sb
t_db_2_sb_0 :: DMAction DMNil ()
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSUnit DummyAction)
)
)
) ()
()
t_db_2_sb_0 = db >> db >> db >> sb
t_db_3_sb_0 :: DMAction DMNil ()
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSUnit DummyAction)
)
)
)
) ()
()
t_db_3_sb_0 = db >> db >> db >> db >> sb
t_db_4_sb_0 :: DMAction DMNil ()
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
) ()
()
t_db_4_sb_0 = db >> db >> db >> db >> db >> sb
t_db_0_sb_1 :: DMAction DMNil () (DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
() ()
t_db_0_sb_1 = db >> sb >> sb
t_db_0_sb_2 :: DMAction DMNil () (DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
() ()
t_db_0_sb_2 = db >> sb >> sb >> sb
t_db_1_sb_2 :: DMAction DMNil () (DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
() ()
t_db_1_sb_2 = db >> db >> sb >> sb >> sb
t_db_2_sb_2 :: DMAction DMNil () (DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
)
() ()
t_db_2_sb_2 = db >> db >> db >> sb >> sb >> sb
t_db_0_sb_3 :: DMAction DMNil () (DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
() ()
t_db_0_sb_3 = db >> sb >> sb >> sb >> sb
t_db_1_sb_3 :: DMAction DMNil () (DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
)
() ()
t_db_1_sb_3 = db >> db >> sb >> sb >> sb >> sb
t_db_2_sb_3 :: DMAction DMNil () (DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
)
)
() ()
t_db_2_sb_3 = db >> db >> db >> sb >> sb >> sb >> sb
t_db_0_sb_4 :: DMAction DMNil () (DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
)
() ()
t_db_0_sb_4 = db >> sb >> sb >> sb >> sb >> sb
t_db_1_sb_4 :: DMAction DMNil ()
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
)
) ()
()
t_db_1_sb_4 = db >> db >> sb >> sb >> sb >> sb >> sb
t_db_2_sb_4 :: DMAction DMNil ()
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
)
)
) ()
()
t_db_2_sb_4 = db >> db >> db >> sb >> sb >> sb >> sb >> sb
t_db_3_sb_4 :: DMAction DMNil ()
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
)
)
)
) ()
()
t_db_3_sb_4 = db >> db >> db >> db >> sb >> sb >> sb >> sb >> sb
-- Likewise we want to properly group static buffer actions prefixing a dynamic buffer action
t_sb_0_db_0 :: DMAction DMNil ()
(DBAction (BSUnit DummyAction) (DBUnit DummyAction)
) ()
()
t_sb_0_db_0 = sb >> db
t_sb_0_db_1 :: DMAction DMNil ()
(DBAction (BSUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBUnit DummyAction)
)
) ()
()
t_sb_0_db_1 = sb >> db >> db
t_sb_1_db_0 :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
(DBUnit DummyAction)
) ()
()
t_sb_1_db_0 = sb >> sb >> db
t_sb_2_db_0 :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
(DBUnit DummyAction)
) ()
()
t_sb_2_db_0 = sb >> sb >> sb >> db
t_sb_2_db_1 :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
(DBAction (DBUnit DummyAction)
(DBUnit DummyAction)
)
) ()
()
t_sb_2_db_1 = sb >> sb >> sb >> db >> db
t_sb_2_db_2 :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBUnit DummyAction)
)
)
) ()
()
t_sb_2_db_2 = sb >> sb >> sb >> db >> db >> db
t_sb_3_db_0 :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
(DBUnit DummyAction)
) ()
()
t_sb_3_db_0 = sb >> sb >> sb >> sb >> db
t_sb_3_db_1 :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
(DBAction (DBUnit DummyAction)
(DBUnit DummyAction)
)
) ()
()
t_sb_3_db_1 = sb >> sb >> sb >> sb >> db >> db
t_sb_3_db_2 :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBUnit DummyAction)
)
)
) ()
()
t_sb_3_db_2 = sb >> sb >> sb >> sb >> db >> db >> db
t_sb_3_db_3 :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBUnit DummyAction)
)
)
)
) ()
()
t_sb_3_db_3 = sb >> sb >> sb >> sb >> db >> db >> db >> db
-- Now for the bracket tests:
-- sb bracketed by db's
t_db_0_sb_0_db_0 :: DMAction DMNil ()
(DBAction (DBUnit DummyAction)
(DBAction (BSUnit DummyAction)
(DBUnit DummyAction)
)
) ()
()
t_db_0_sb_0_db_0 = db >> sb >> db
t_db_0_sb_1_db_0 :: DMAction DMNil ()
(DBAction (DBUnit DummyAction)
(DBAction (BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
(DBUnit DummyAction)
)
) ()
()
t_db_0_sb_1_db_0 = db >> sb >> sb >> db
t_db_0_sb_2_db_0 :: DMAction DMNil ()
(DBAction (DBUnit DummyAction)
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
(DBUnit DummyAction)
)
) ()
()
t_db_0_sb_2_db_0 = db >> sb >> sb >> sb >> db
t_db_0_sb_3_db_0 :: DMAction DMNil ()
(DBAction (DBUnit DummyAction)
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
(DBUnit DummyAction)
)
) ()
()
t_db_0_sb_3_db_0 = db >> sb >> sb >> sb >> sb >> db
t_db_0_sb_4_db_0 :: DMAction DMNil ()
(DBAction (DBUnit DummyAction)
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
(DBUnit DummyAction)
)
) ()
()
t_db_0_sb_4_db_0 = db >> sb >> sb >> sb >> sb >> sb >> db
t_db_1_sb_4_db_1 :: DMAction DMNil ()
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
(DBAction (DBUnit DummyAction)
(DBUnit DummyAction)
)
)
)
) ()
()
t_db_1_sb_4_db_1 = db >> db >> sb >> sb >> sb >> sb >> sb >> db >> db
t_db_2_sb_4_db_2 :: DMAction DMNil ()
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBUnit DummyAction)
)
)
)
)
)
) ()
()
t_db_2_sb_4_db_2 = db >> db >> db >> sb >> sb >> sb >> sb >> sb >> db >> db >> db
t_sb_0_db_0_sb_0 :: DMAction DMNil ()
(DBAction (BSUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSUnit DummyAction)
)
) ()
()
t_sb_0_db_0_sb_0 = sb >> db >> sb
t_sb_0_db_1_sb_0 :: DMAction DMNil ()
(DBAction (BSUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSUnit DummyAction)
)
)
) ()
()
t_sb_0_db_1_sb_0 = sb >> db >> db >> sb
t_sb_0_db_2_sb_0 :: DMAction DMNil ()
(DBAction (BSUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSUnit DummyAction)
)
)
)
) ()
()
t_sb_0_db_2_sb_0 = sb >> db >> db >> db >> sb
t_sb_0_db_3_sb_0 :: DMAction DMNil ()
(DBAction (BSUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
) ()
()
t_sb_0_db_3_sb_0 = sb >> db >> db >> db >> db >> sb
t_sb_1_db_3_sb_0 :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
) ()
()
t_sb_1_db_3_sb_0 = sb >> sb >> db >> db >> db >> db >> sb
t_sb_2_db_3_sb_0 :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
) ()
()
t_sb_2_db_3_sb_0 = sb >> sb >> sb >> db >> db >> db >> db >> sb
t_sb_3_db_3_sb_0 :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
) ()
()
t_sb_3_db_3_sb_0 = sb >> sb >> sb >> sb >> db >> db >> db >> db >> sb
t_sb_3_db_3_sb_1 :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
)
) ()
()
t_sb_3_db_3_sb_1 = sb >> sb >> sb >> sb >> db >> db >> db >> db >> sb >> sb
t_sb_3_db_3_sb_2 :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
)
)
) ()
()
t_sb_3_db_3_sb_2 = sb >> sb >> sb >> sb >> db >> db >> db >> db >> sb >> sb >> sb
t_sb_3_db_3_sb_2' :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
)
)
) ()
()
t_sb_3_db_3_sb_2' = sb >> sb >> sb >> sb >> db >> db >> db >> db >> t_sb_2'
t_sb_3_db_3_sb_2'' :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
)
)
) ()
()
t_sb_3_db_3_sb_2'' = t_sb_2' >> sb >> db >> db >> db >> db >> t_sb_2'
t_sb_3_db_3_sb_2''' :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
)
)
) ()
()
t_sb_3_db_3_sb_2''' = t_sb_3' >> db >> db >> db >> db >> t_sb_2'
t_sb_3_db_3_sb_2'''' :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
)
)
) ()
()
t_sb_3_db_3_sb_2'''' = t_sb_3' >> t_db_3' >> t_sb_2'
t_sb_3_db_3_sb_2''''' :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
)
)
)
) ()
()
t_sb_3_db_3_sb_2''''' = do
t_sb_3'
t_db_3'
t_sb_2'
t_sb_3_db_3_sb_2_db_0 :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
(DBUnit DummyAction)
)
)
)
)
)
) ()
()
t_sb_3_db_3_sb_2_db_0 = sb >> sb >> sb >> sb >> db >> db >> db >> db >> sb >> sb >> sb >> db
t_sb_3_db_3_sb_2_db_3 :: DMAction DMNil ()
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (BSSeq (BSUnit DummyAction)
(BSSeq (BSUnit DummyAction)
(BSUnit DummyAction)
)
)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBAction (DBUnit DummyAction)
(DBUnit DummyAction)
)
)
)
)
)
)
)
)
) ()
()
t_sb_3_db_3_sb_2_db_3 = sb >> sb >> sb >> sb >> db >> db >> db >> db >> sb >> sb >> sb >> db >> db >> db >> db
t_crazy_0 = do
sb
sb
db
db
db
db
sb
db
sb
db
sb
db
db
sb
#endif
main = run_test $ do
returnM () :: Test ()