summaryrefslogtreecommitdiff
path: root/app/Scratchy/Syntax.hs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--app/Scratchy/Syntax.hs66
1 files changed, 65 insertions, 1 deletions
diff --git a/app/Scratchy/Syntax.hs b/app/Scratchy/Syntax.hs
index c77e51a..128ea01 100644
--- a/app/Scratchy/Syntax.hs
+++ b/app/Scratchy/Syntax.hs
@@ -82,6 +82,70 @@ data SProg a
------------------------------------------------------------
combine :: SProg () -> SProg () -> SProg ()
-combine = undefined -- Fill this in
+-- Base cases
+combine (Pure ()) p2 = p2
+combine p1 (Pure ()) = p1
+combine (OnKeyEvent k1 handler1 cont1) p2 =
+ OnKeyEvent k1 handler1 (combine cont1 p2)
+
+combine p1 (OnKeyEvent k2 handler2 cont2) =
+ OnKeyEvent k2 handler2 (combine p1 cont2)
+
+combine (OnTargetReached sp1 h1 c1) p2 =
+ OnTargetReached sp1 h1 (combine c1 p2)
+
+combine p1 (OnTargetReached sp2 h2 c2) =
+ OnTargetReached sp2 h2 (combine p1 c2)
+
+combine (OnTargetUpdated sp1 h1 c1) p2 =
+ OnTargetUpdated sp1 h1 (combine c1 p2)
+
+combine p1 (OnTargetUpdated sp2 h2 c2) =
+ OnTargetUpdated sp2 h2 (combine p1 c2)
+
+combine (OnBarrierHit sp1 h1 c1) p2 =
+ OnBarrierHit sp1 h1 (combine c1 p2)
+
+combine p1 (OnBarrierHit sp2 h2 c2) =
+ OnBarrierHit sp2 h2 (combine p1 c2)
+
+combine (After dur1 handler1 cont1) p2 =
+ After dur1 handler1 (combine cont1 p2)
+
+combine p1 (After dur2 handler2 cont2) =
+ After dur2 handler2 (combine p1 cont2)
+
+combine (NewSprite cell pic k1) p2 =
+ NewSprite cell pic (\sp -> combine (k1 sp) p2)
+
+combine p1 (NewSprite cell pic k2) =
+ NewSprite cell pic (combine p1 . k2)
+
+combine (SetColor sp c cont1) p2 =
+ SetColor sp c (combine cont1 p2)
+
+combine p1 (SetColor sp c cont2) =
+ SetColor sp c (combine p1 cont2)
+
+combine (SetTarget sp cell cont1) p2 =
+ SetTarget sp cell (combine cont1 p2)
+
+combine p1 (SetTarget sp cell cont2) =
+ SetTarget sp cell (combine p1 cont2)
+
+combine (GetTarget sp k1) p2 =
+ GetTarget sp (\cell -> combine (k1 cell) p2)
+
+combine p1 (GetTarget sp k2) =
+ GetTarget sp (combine p1 . k2)
+
+combine (SetBackgroundColor c cont1) p2 =
+ SetBackgroundColor c (combine cont1 p2)
+
+combine p1 (SetBackgroundColor c cont2) =
+ SetBackgroundColor c (combine p1 cont2)
+
+combine (InspectCell cell k1) p2 =
+ InspectCell cell (\result -> combine (k1 result) p2)