{-# OPTIONS -XNoMonomorphismRestriction #-} module ZIP (inv_Fzip,zip) where import Control.Monad import InvUtil import Data.Tuple import MyData inv_Fzip = e_Fzip data StatesOfFzip e_1 e_6 e_7 e_8 e_11 e_12 e_DEAD = S_Fzip_1 e_1 | S_Fzip_6 e_6 | S_Fzip_7 e_7 | S_Fzip_8 e_8 | S_Fzip_11 e_11 | S_Fzip_12 e_12 | S_Fzip_DEAD e_DEAD e_Fzip x = case trav_Fzip_0 x of S_Fzip_1 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: Fzip" trav_Fzip_0 (Nil) = sem_Fzip_0_Nil Nil trav_Fzip_0 (Cons t1 t2) = sem_Fzip_0_Cons (Cons t1 t2) (trav_Fzip_2 t1) (trav_Fzip_1 t2) trav_Fzip_0 t = sem_Fzip_0___ t trav_Fzip_1 (Nil) = sem_Fzip_1_Nil Nil trav_Fzip_1 (Cons t1 t2) = sem_Fzip_1_Cons (Cons t1 t2) (trav_Fzip_2 t1) (trav_Fzip_1 t2) trav_Fzip_1 t = sem_Fzip_1___ t trav_Fzip_2 (Pair t1 t2) = sem_Fzip_2_Pair (Pair t1 t2) (trav_Fzip_4 t1) (trav_Fzip_3 t2) trav_Fzip_2 t = sem_Fzip_2___ t trav_Fzip_3 t = sem_Fzip_3___ t trav_Fzip_4 t = sem_Fzip_4___ t sem_Fzip_0_Cons tree (S_Fzip_8 t1) (S_Fzip_6 t2) = S_Fzip_1 ((\(x1_1) (x2_1) -> (do tmp_r1 <- x1_1 tmp_r2 <- x2_1 (\f g m1 m2 -> f m1 m2 >>= g) (\(r_v11, r_v12) (r_v21, r_v22) -> return (r_v11, r_v12, r_v21, r_v22)) (\(r_v1, r_v2, r_v3, r_v4) -> return ((,) (Cons r_v1 r_v3) (Cons r_v2 r_v4))) tmp_r1 tmp_r2)) t1 t2) sem_Fzip_0_Cons _ _ _ = S_Fzip_DEAD mymzero sem_Fzip_0_Nil tree = S_Fzip_1 (mymplus (return () >>= (\() -> return ((,) (Cons something something) Nil))) (return () >>= (\() -> return ((,) Nil something)))) sem_Fzip_0_Nil _ = S_Fzip_DEAD mymzero sem_Fzip_0___ tree = S_Fzip_7 undefined sem_Fzip_0___ _ = S_Fzip_DEAD mymzero sem_Fzip_1_Cons tree (S_Fzip_8 t1) (S_Fzip_6 t2) = S_Fzip_6 ((\(x1_1) (x2_1) -> (do tmp_r1 <- x1_1 tmp_r2 <- x2_1 (\f g m1 m2 -> f m1 m2 >>= g) (\(r_v11, r_v12) (r_v21, r_v22) -> return (r_v11, r_v12, r_v21, r_v22)) (\(r_v1, r_v2, r_v3, r_v4) -> (\(r_x1, r_x2) -> do (r_v11) <- return r_x1 (r_v21) <- return r_x2 return (r_v11, r_v21)) ((,) (Cons r_v1 r_v3) (Cons r_v2 r_v4))) tmp_r1 tmp_r2)) t1 t2) sem_Fzip_1_Cons _ _ _ = S_Fzip_DEAD mymzero sem_Fzip_1_Nil tree = S_Fzip_6 (mymplus (return () >>= (\() -> (\(r_x1, r_x2) -> do (r_v11) <- return r_x1 (r_v21) <- return r_x2 return (r_v11, r_v21)) ((,) (Cons something something) Nil))) (return () >>= (\() -> (\(r_x1, r_x2) -> do (r_v11) <- return r_x1 (r_v21) <- return r_x2 return (r_v11, r_v21)) ((,) Nil something)))) sem_Fzip_1_Nil _ = S_Fzip_DEAD mymzero sem_Fzip_1___ tree = S_Fzip_7 undefined sem_Fzip_1___ _ = S_Fzip_DEAD mymzero sem_Fzip_2_Pair tree (S_Fzip_12 t1) (S_Fzip_11 t2) = S_Fzip_8 ((\(x1_1) (x2_1) -> (do tmp_r1 <- x1_1 tmp_r2 <- x2_1 (\(r_v11) (r_v21) -> return (r_v11, r_v21)) tmp_r1 tmp_r2)) t1 t2) sem_Fzip_2_Pair _ _ _ = S_Fzip_DEAD mymzero sem_Fzip_2___ tree = S_Fzip_7 undefined sem_Fzip_2___ _ = S_Fzip_DEAD mymzero sem_Fzip_3___ tree = S_Fzip_11 (return tree) sem_Fzip_3___ _ = S_Fzip_DEAD mymzero sem_Fzip_4___ tree = S_Fzip_12 (return tree) sem_Fzip_4___ _ = S_Fzip_DEAD mymzero data StatesOfE22 e_0 e_DEAD = S_E22_0 e_0 | S_E22_DEAD e_DEAD e_E22 x = case trav_E22_0 x of S_E22_0 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E22" trav_E22_0 t = sem_E22_0___ t sem_E22_0___ tree = S_E22_0 (return tree) sem_E22_0___ _ = S_E22_DEAD mymzero data StatesOfE23 e_0 e_DEAD = S_E23_0 e_0 | S_E23_DEAD e_DEAD e_E23 x = case trav_E23_0 x of S_E23_0 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E23" trav_E23_0 t = sem_E23_0___ t sem_E23_0___ tree = S_E23_0 (return tree) sem_E23_0___ _ = S_E23_DEAD mymzero zip (Nil) y = Nil zip (Cons a x) (Nil) = Nil zip (Cons a x) (Cons b y) = Cons (Pair a b) (zip x y)