module CmmTx where data TxRes a = TxRes Bool a instance Monad TxRes where return = TxRes False {- Here you can get a simplifier loop thus: NOTE: Simplifier still going after 4 iterations; bailing out. Size = 52 NOTE: Simplifier still going after 4 iterations; bailing out. Size = 52 NOTE: Simplifier still going after 4 iterations; bailing out. Size = 52 NOTE: Simplifier still going after 4 iterations; bailing out. Size = 52 Reason: 'a' is inline (not pre/post unconditionally; just ordinary inlining) Then, since ($dm>>) has arity 3, the rhs of (>>) is a PAP, so the arg is floated out, past the big lambdas. See Note [Unsaturated functions] in GHC.Core.Opt.Simplify.Utils ------------------------------------------------------------ a_s9f{v} [lid] = base:GHC.Base.:DMonad{v r5} [gid] @ main:CmmTx.TxRes{tc rd} >>={v a6E} [lid] >>{v a6H} [lid] return{v a6J} [lid] fail{v a6M} [lid] >>{v a6H} [lid] [ALWAYS LoopBreaker Nothing] :: forall a{tv a6F} [tv] b{tv a6G} [tv]. main:CmmTx.TxRes{tc rd} a{tv a6F} [tv] -> main:CmmTx.TxRes{tc rd} b{tv a6G} [tv] -> main:CmmTx.TxRes{tc rd} b{tv a6G} [tv] [Arity 2 Str: DmdType LL] >>{v a6H} [lid] = \ (@ a{tv a78} [sk] :: ghc-prim:GHC.Prim.*{(w) tc 34d}) (@ b{tv a79} [sk] :: ghc-prim:GHC.Prim.*{(w) tc 34d}) -> base:GHC.Base.$dm>>{v r5f} [gid] @ main:CmmTx.TxRes{tc rd} a_s9f{v} [lid] @ a{tv a78} [sk] @ b{tv a79} [sk] -}