module Lang.LamIf.Execution where import FP import MAAM import Lang.LamIf.Semantics import Lang.LamIf.Domains import Lang.LamIf.Values import Lang.LamIf.Monads import Lang.LamIf.Stamp import Lang.LamIf.Time runParams ∷ TimeParam → DomainParam → (DomainParam → MonadParam) → Exp → Doc runParams t v m e = case m v of MonadParam (P ∷ P m) (iso ∷ ς Exp ⇄ ς' Exp) pty (W ∷ W (ExecutionLamIf val (InjectLamIf var) ς' m,LFPLamIf ς)) → pty $ ex t iso (return ∷ a → m a) $ isoFrom iso $ inject $ InjectLamIf (e,LamIfState bot Nothing time₀ bot bot) runDiffsParams ∷ TimeParam → DomainParam → (DomainParam → MonadParam) → Exp → Doc runDiffsParams t v m e = case m v of MonadParam (P ∷ P m) (iso ∷ ς Exp ⇄ ς' Exp) (pty ∷ ς Exp → Doc) (W ∷ W (ExecutionLamIf val (InjectLamIf var) ς' m,LFPLamIf ς)) → pretty $ map pty $ exDiffs t iso (return ∷ a → m a) $ isoFrom iso $ inject $ InjectLamIf (e,LamIfState bot Nothing time₀ bot bot)