{-# OPTIONS -XNoMonomorphismRestriction #-} module TABA_REVERSE (inv_Ftaba_reverse,taba_reverse) where import Control.Monad import InvUtil import Data.Tuple import MyData inv_Ftaba_reverse = runI . e_Ftaba_reverse data StatesOfFtaba_reverse e_0 = S_Ftaba_reverse_0 e_0 e_Ftaba_reverse x = case trav_Ftaba_reverse_0 x of S_Ftaba_reverse_0 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: Ftaba_reverse" trav_Ftaba_reverse_0 t = sem_Ftaba_reverse_0___ t sem_Ftaba_reverse_0___ tree = S_Ftaba_reverse_0 (return tree >>= (\(r_v1) -> (\(r_x1) -> do (r_v11) <- (return r_x1 >>= e_E3) return (r_v11)) (Pair Nil r_v1) >>= (\(r_v1) -> return r_v1))) data StatesOfE3 e_1 e_5 e_6 e_7 e_10 e_11 e_12 = S_E3_1 e_1 | S_E3_5 e_5 | S_E3_6 e_6 | S_E3_7 e_7 | S_E3_10 e_10 | S_E3_11 e_11 | S_E3_12 e_12 e_E3 x = case trav_E3_0 x of S_E3_1 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E3" trav_E3_0 (Pair t1 t2) = sem_E3_0_Pair (Pair t1 t2) (trav_E3_4 t1) (trav_E3_1 t2) trav_E3_0 t = sem_E3_0___ t trav_E3_1 (Nil) = sem_E3_1_Nil Nil trav_E3_1 (Cons t1 t2) = sem_E3_1_Cons (Cons t1 t2) (trav_E3_3 t1) (trav_E3_2 t2) trav_E3_1 t = sem_E3_1___ t trav_E3_2 t = sem_E3_2___ t trav_E3_3 t = sem_E3_3___ t trav_E3_4 t = sem_E3_4___ t sem_E3_0_Pair tree (S_E3_12 t1) (S_E3_6 t2) = S_E3_1 ((\(x1_1, x1_2) (x2_1) -> (do tmp_r1 <- x1_1 tmp_r2 <- x2_1 (\f g m1 m2 -> f m1 m2 >>= g) (\(r_v11) () -> return (r_v11)) ((\(r_v1) -> (\(r_x1, r_x2) -> do (r_v11) <- return r_x1 (r_v21) <- return r_x2 return (r_v11, r_v21)) ((,) Z r_v1)) >=> (\(r_v1, r_v2) -> (\(r_x1) -> do (r_v11) <- (return r_x1 >>= e_E4) return (r_v11)) (Pair r_v1 r_v2))) tmp_r1 tmp_r2)) t1 t2) sem_E3_0_Pair tree (S_E3_12 t1) (S_E3_7 t2) = S_E3_1 ((\(x1_1, x1_2) (x2_1) -> (do tmp_r1 <- x1_2 tmp_r2 <- x2_1 (\f g m1 m2 -> f m1 m2 >>= g) (\(r_v11) (r_v21, r_v22) -> return (r_v21, r_v11, r_v22)) ((\(r_v1, r_v2, r_v3) -> (\(r_x1) -> do (r_v11, r_v12) <- (return r_x1 >>= e_E29) return (r_v11, r_v12)) (Pair (Cons r_v1 r_v2) r_v3)) >=> ((\(r_v1, r_v2) -> (\(r_x1, r_x2) -> do (r_v11) <- return r_x1 (r_v21) <- return r_x2 return (r_v11, r_v21)) ((,) (S r_v1) r_v2)) >=> (\(r_v1, r_v2) -> (\(r_x1) -> do (r_v11) <- (return r_x1 >>= e_E4) return (r_v11)) (Pair r_v1 r_v2)))) tmp_r1 tmp_r2)) t1 t2) sem_E3_0___ tree = S_E3_5 undefined sem_E3_1_Cons tree (S_E3_11 t1) (S_E3_10 t2) = S_E3_7 ((\(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_E3_1_Nil tree = S_E3_6 (return ()) sem_E3_1___ tree = S_E3_5 undefined sem_E3_2___ tree = S_E3_10 (return tree) sem_E3_3___ tree = S_E3_11 (return tree) sem_E3_4___ tree = S_E3_12 (return tree, return tree) data StatesOfE4 e_1 e_7 e_8 e_11 e_12 e_13 e_14 e_15 e_17 = S_E4_1 e_1 | S_E4_7 e_7 | S_E4_8 e_8 | S_E4_11 e_11 | S_E4_12 e_12 | S_E4_13 e_13 | S_E4_14 e_14 | S_E4_15 e_15 | S_E4_17 e_17 e_E4 x = case trav_E4_0 x of S_E4_1 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E4" trav_E4_0 (Pair t1 t2) = sem_E4_0_Pair (Pair t1 t2) (trav_E4_4 t1) (trav_E4_1 t2) trav_E4_0 t = sem_E4_0___ t trav_E4_1 (Nil) = sem_E4_1_Nil Nil trav_E4_1 (Cons t1 t2) = sem_E4_1_Cons (Cons t1 t2) (trav_E4_3 t1) (trav_E4_2 t2) trav_E4_1 t = sem_E4_1___ t trav_E4_2 t = sem_E4_2___ t trav_E4_3 t = sem_E4_3___ t trav_E4_4 (Z) = sem_E4_4_Z Z trav_E4_4 (S t1) = sem_E4_4_S (S t1) (trav_E4_5 t1) trav_E4_4 t = sem_E4_4___ t trav_E4_5 t = sem_E4_5___ t sem_E4_0_Pair tree (S_E4_14 t1) (S_E4_7 t2) = S_E4_1 ((\(x1_1) (x2_1) -> (do tmp_r1 <- x1_1 tmp_r2 <- x2_1 (\f g m1 m2 -> f m1 m2 >>= g) (\() () -> return ()) (\() -> (\(r_x1) -> do (r_v11) <- return r_x1 return (r_v11)) Nil) tmp_r1 tmp_r2)) t1 t2) sem_E4_0_Pair tree (S_E4_15 t1) (S_E4_8 t2) = S_E4_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_v21, r_v22) -> return (r_v21, r_v11, r_v22)) ((\(r_v1, r_v2, r_v3) -> (\(r_x1, r_x2) -> do (r_v11) <- (return r_x1 >>= e_E53) (r_v21) <- return r_x2 return (r_v21, r_v11)) ((,) (Pair r_v2 r_v3) r_v1)) >=> (\(r_v1, r_v2) -> (\(r_x1) -> do (r_v11) <- return r_x1 return (r_v11)) (Cons r_v1 r_v2))) tmp_r1 tmp_r2)) t1 t2) sem_E4_0___ tree = S_E4_13 undefined sem_E4_1_Cons tree (S_E4_12 t1) (S_E4_11 t2) = S_E4_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_E4_1_Nil tree = S_E4_7 (return ()) sem_E4_1___ tree = S_E4_13 undefined sem_E4_2___ tree = S_E4_11 (return tree) sem_E4_3___ tree = S_E4_12 (return tree) sem_E4_4_S tree (S_E4_17 t1) = S_E4_15 ((\(x1_1) -> (do tmp_r1 <- x1_1 (\(r_v11) -> return (r_v11)) tmp_r1)) t1) sem_E4_4_Z tree = S_E4_14 (return ()) sem_E4_4___ tree = S_E4_13 undefined sem_E4_5___ tree = S_E4_17 (return tree) data StatesOfE5 e_0 = S_E5_0 e_0 e_E5 x = case trav_E5_0 x of S_E5_0 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E5" trav_E5_0 t = sem_E5_0___ t sem_E5_0___ tree = S_E5_0 (return tree) data StatesOfE16 e_0 = S_E16_0 e_0 e_E16 x = case trav_E16_0 x of S_E16_0 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E16" trav_E16_0 t = sem_E16_0___ t sem_E16_0___ tree = S_E16_0 (return tree) data StatesOfE17 e_0 = S_E17_0 e_0 e_E17 x = case trav_E17_0 x of S_E17_0 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E17" trav_E17_0 t = sem_E17_0___ t sem_E17_0___ tree = S_E17_0 (return tree) data StatesOfE29 e_3 e_5 e_6 e_7 e_10 e_11 e_12 = S_E29_3 e_3 | S_E29_5 e_5 | S_E29_6 e_6 | S_E29_7 e_7 | S_E29_10 e_10 | S_E29_11 e_11 | S_E29_12 e_12 e_E29 x = case trav_E29_0 x of S_E29_3 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E29" trav_E29_0 (Pair t1 t2) = sem_E29_0_Pair (Pair t1 t2) (trav_E29_4 t1) (trav_E29_1 t2) trav_E29_0 t = sem_E29_0___ t trav_E29_1 (Nil) = sem_E29_1_Nil Nil trav_E29_1 (Cons t1 t2) = sem_E29_1_Cons (Cons t1 t2) (trav_E29_3 t1) (trav_E29_2 t2) trav_E29_1 t = sem_E29_1___ t trav_E29_2 t = sem_E29_2___ t trav_E29_3 t = sem_E29_3___ t trav_E29_4 t = sem_E29_4___ t sem_E29_0_Pair tree (S_E29_12 t1) (S_E29_6 t2) = S_E29_3 ((\(x1_1, x1_2) (x2_1) -> (do tmp_r1 <- x1_1 tmp_r2 <- x2_1 (\f g m1 m2 -> f m1 m2 >>= g) (\(r_v11) () -> return (r_v11)) (\(r_v1) -> (\(r_x1, r_x2) -> do (r_v11) <- return r_x1 (r_v21) <- return r_x2 return (r_v11, r_v21)) ((,) Z r_v1)) tmp_r1 tmp_r2)) t1 t2) sem_E29_0_Pair tree (S_E29_12 t1) (S_E29_7 t2) = S_E29_3 ((\(x1_1, x1_2) (x2_1) -> (do tmp_r1 <- x1_2 tmp_r2 <- x2_1 (\f g m1 m2 -> f m1 m2 >>= g) (\(r_v11) (r_v21, r_v22) -> return (r_v21, r_v11, r_v22)) ((\(r_v1, r_v2, r_v3) -> (\(r_x1) -> do (r_v11, r_v12) <- (return r_x1 >>= e_E29) return (r_v11, r_v12)) (Pair (Cons r_v1 r_v2) r_v3)) >=> (\(r_v1, r_v2) -> (\(r_x1, r_x2) -> do (r_v11) <- return r_x1 (r_v21) <- return r_x2 return (r_v11, r_v21)) ((,) (S r_v1) r_v2))) tmp_r1 tmp_r2)) t1 t2) sem_E29_0___ tree = S_E29_5 undefined sem_E29_1_Cons tree (S_E29_11 t1) (S_E29_10 t2) = S_E29_7 ((\(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_E29_1_Nil tree = S_E29_6 (return ()) sem_E29_1___ tree = S_E29_5 undefined sem_E29_2___ tree = S_E29_10 (return tree) sem_E29_3___ tree = S_E29_11 (return tree) sem_E29_4___ tree = S_E29_12 (return tree, return tree) data StatesOfE30 e_0 = S_E30_0 e_0 e_E30 x = case trav_E30_0 x of S_E30_0 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E30" trav_E30_0 t = sem_E30_0___ t sem_E30_0___ tree = S_E30_0 (return tree) data StatesOfE31 e_0 = S_E31_0 e_0 e_E31 x = case trav_E31_0 x of S_E31_0 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E31" trav_E31_0 t = sem_E31_0___ t sem_E31_0___ tree = S_E31_0 (return tree) data StatesOfE53 e_3 e_7 e_8 e_11 e_12 e_13 e_14 e_15 e_17 = S_E53_3 e_3 | S_E53_7 e_7 | S_E53_8 e_8 | S_E53_11 e_11 | S_E53_12 e_12 | S_E53_13 e_13 | S_E53_14 e_14 | S_E53_15 e_15 | S_E53_17 e_17 e_E53 x = case trav_E53_0 x of S_E53_3 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E53" trav_E53_0 (Pair t1 t2) = sem_E53_0_Pair (Pair t1 t2) (trav_E53_4 t1) (trav_E53_1 t2) trav_E53_0 t = sem_E53_0___ t trav_E53_1 (Nil) = sem_E53_1_Nil Nil trav_E53_1 (Cons t1 t2) = sem_E53_1_Cons (Cons t1 t2) (trav_E53_3 t1) (trav_E53_2 t2) trav_E53_1 t = sem_E53_1___ t trav_E53_2 t = sem_E53_2___ t trav_E53_3 t = sem_E53_3___ t trav_E53_4 (Z) = sem_E53_4_Z Z trav_E53_4 (S t1) = sem_E53_4_S (S t1) (trav_E53_5 t1) trav_E53_4 t = sem_E53_4___ t trav_E53_5 t = sem_E53_5___ t sem_E53_0_Pair tree (S_E53_14 t1) (S_E53_7 t2) = S_E53_3 ((\(x1_1) (x2_1) -> (do tmp_r1 <- x1_1 tmp_r2 <- x2_1 (\f g m1 m2 -> f m1 m2 >>= g) (\() () -> return ()) (\() -> (\(r_x1) -> do (r_v11) <- return r_x1 return (r_v11)) Nil) tmp_r1 tmp_r2)) t1 t2) sem_E53_0_Pair tree (S_E53_15 t1) (S_E53_8 t2) = S_E53_3 ((\(x1_1) (x2_1) -> (do tmp_r1 <- x1_1 tmp_r2 <- x2_1 (\f g m1 m2 -> f m1 m2 >>= g) (\(r_v11) (r_v21, r_v22) -> return (r_v21, r_v11, r_v22)) ((\(r_v1, r_v2, r_v3) -> (\(r_x1, r_x2) -> do (r_v11) <- (return r_x1 >>= e_E53) (r_v21) <- return r_x2 return (r_v21, r_v11)) ((,) (Pair r_v2 r_v3) r_v1)) >=> (\(r_v1, r_v2) -> (\(r_x1) -> do (r_v11) <- return r_x1 return (r_v11)) (Cons r_v1 r_v2))) tmp_r1 tmp_r2)) t1 t2) sem_E53_0___ tree = S_E53_13 undefined sem_E53_1_Cons tree (S_E53_12 t1) (S_E53_11 t2) = S_E53_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_E53_1_Nil tree = S_E53_7 (return ()) sem_E53_1___ tree = S_E53_13 undefined sem_E53_2___ tree = S_E53_11 (return tree) sem_E53_3___ tree = S_E53_12 (return tree) sem_E53_4_S tree (S_E53_17 t1) = S_E53_15 ((\(x1_1) -> (do tmp_r1 <- x1_1 (\(r_v11) -> return (r_v11)) tmp_r1)) t1) sem_E53_4_Z tree = S_E53_14 (return ()) sem_E53_4___ tree = S_E53_13 undefined sem_E53_5___ tree = S_E53_17 (return tree) data StatesOfE54 e_0 = S_E54_0 e_0 e_E54 x = case trav_E54_0 x of S_E54_0 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E54" trav_E54_0 t = sem_E54_0___ t sem_E54_0___ tree = S_E54_0 (return tree) data StatesOfE55 e_0 = S_E55_0 e_0 e_E55 x = case trav_E55_0 x of S_E55_0 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E55" trav_E55_0 t = sem_E55_0___ t sem_E55_0___ tree = S_E55_0 (return tree) taba_reverse x = lettaba (h (idshape x)) lettaba (Pair (Nil) x) = x h (Pair n x) = hImpl n x hImpl (Z) y = Pair y Nil hImpl (S x) y = lethImpl (hImpl x y) lethImpl (Pair (Cons a x) y) = Pair x (Cons a y) idshape (Nil) = Pair Z Nil idshape (Cons a x) = letidshape (idshape x) a letidshape (Pair n x) a = Pair (S n) (Cons a x)