{-# OPTIONS -XNoMonomorphismRestriction #-} module SNOC (inv_Fsnoc,snoc) where import Control.Monad import InvUtil import Data.Tuple import MyData inv_Fsnoc = runI . e_Fsnoc data StatesOfFsnoc e_1 e_5 e_7 e_8 e_9 = S_Fsnoc_1 e_1 | S_Fsnoc_5 e_5 | S_Fsnoc_7 e_7 | S_Fsnoc_8 e_8 | S_Fsnoc_9 e_9 e_Fsnoc x = case trav_Fsnoc_0 x of S_Fsnoc_1 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: Fsnoc" trav_Fsnoc_0 (Cons t1 t2) = sem_Fsnoc_0_Cons (Cons t1 t2) (trav_Fsnoc_2 t1) (trav_Fsnoc_1 t2) trav_Fsnoc_0 t = sem_Fsnoc_0___ t trav_Fsnoc_1 (Nil) = sem_Fsnoc_1_Nil Nil trav_Fsnoc_1 (Cons t1 t2) = sem_Fsnoc_1_Cons (Cons t1 t2) (trav_Fsnoc_2 t1) (trav_Fsnoc_1 t2) trav_Fsnoc_1 t = sem_Fsnoc_1___ t trav_Fsnoc_2 t = sem_Fsnoc_2___ t sem_Fsnoc_0_Cons tree (S_Fsnoc_9 t1) (S_Fsnoc_8 t2) = S_Fsnoc_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_v11, r_v21, r_v22)) (\(r_v1, r_v2, r_v3) -> return ((,) (Cons r_v1 r_v2) r_v3)) tmp_r1 tmp_r2)) t1 t2) sem_Fsnoc_0_Cons tree (S_Fsnoc_9 t1) (S_Fsnoc_7 t2) = S_Fsnoc_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) -> return ((,) Nil r_v1)) tmp_r1 tmp_r2)) t1 t2) sem_Fsnoc_0___ tree = S_Fsnoc_5 undefined sem_Fsnoc_1_Cons tree (S_Fsnoc_9 t1) (S_Fsnoc_8 t2) = S_Fsnoc_8 ((\(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_v11, r_v21, r_v22)) (\(r_v1, r_v2, r_v3) -> (\(r_x1, r_x2) -> do (r_v11) <- return r_x1 (r_v21) <- return r_x2 return (r_v11, r_v21)) ((,) (Cons r_v1 r_v2) r_v3)) tmp_r1 tmp_r2)) t1 t2) sem_Fsnoc_1_Cons tree (S_Fsnoc_9 t1) (S_Fsnoc_7 t2) = S_Fsnoc_8 ((\(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)) ((,) Nil r_v1)) tmp_r1 tmp_r2)) t1 t2) sem_Fsnoc_1_Nil tree = S_Fsnoc_7 (return ()) sem_Fsnoc_1___ tree = S_Fsnoc_5 undefined sem_Fsnoc_2___ tree = S_Fsnoc_9 (return tree, return tree) data StatesOfE14 e_0 = S_E14_0 e_0 e_E14 x = case trav_E14_0 x of S_E14_0 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E14" trav_E14_0 t = sem_E14_0___ t sem_E14_0___ tree = S_E14_0 (return tree) data StatesOfE15 e_0 = S_E15_0 e_0 e_E15 x = case trav_E15_0 x of S_E15_0 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E15" trav_E15_0 t = sem_E15_0___ t sem_E15_0___ tree = S_E15_0 (return tree) snoc (Nil) y = Cons y Nil snoc (Cons a x) y = Cons a (snoc x y)