{-# OPTIONS -XNoMonomorphismRestriction #-} module DOUBLELIST (inv_FdoubleList,doubleList) where import Control.Monad import InvUtil import Data.Tuple import MyData inv_FdoubleList = runI . e_FdoubleList data StatesOfFdoubleList e_1 e_8 e_10 e_11 e_12 e_13 = S_FdoubleList_1 e_1 | S_FdoubleList_8 e_8 | S_FdoubleList_10 e_10 | S_FdoubleList_11 e_11 | S_FdoubleList_12 e_12 | S_FdoubleList_13 e_13 e_FdoubleList x = case trav_FdoubleList_0 x of S_FdoubleList_1 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: FdoubleList" trav_FdoubleList_0 (Nil) = sem_FdoubleList_0_Nil Nil trav_FdoubleList_0 (Cons t1 t2) = sem_FdoubleList_0_Cons (Cons t1 t2) (trav_FdoubleList_3 t1) (trav_FdoubleList_1 t2) trav_FdoubleList_0 t = sem_FdoubleList_0___ t trav_FdoubleList_1 (Cons t1 t2) = sem_FdoubleList_1_Cons (Cons t1 t2) (trav_FdoubleList_4 t1) (trav_FdoubleList_2 t2) trav_FdoubleList_1 t = sem_FdoubleList_1___ t trav_FdoubleList_2 (Nil) = sem_FdoubleList_2_Nil Nil trav_FdoubleList_2 (Cons t1 t2) = sem_FdoubleList_2_Cons (Cons t1 t2) (trav_FdoubleList_3 t1) (trav_FdoubleList_1 t2) trav_FdoubleList_2 t = sem_FdoubleList_2___ t trav_FdoubleList_3 t = sem_FdoubleList_3___ t trav_FdoubleList_4 t = sem_FdoubleList_4___ t sem_FdoubleList_0_Cons tree (S_FdoubleList_12 t1) (S_FdoubleList_10 t2) = S_FdoubleList_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) -> do let tv2 = r_v22 tv1 <- checkEqPrim r_v11 r_v21 return (tv1, tv2)) (\(r_v1, r_v2) -> return (Cons r_v1 r_v2)) tmp_r1 tmp_r2)) t1 t2) sem_FdoubleList_0_Nil tree = S_FdoubleList_1 (return () >>= (\() -> return Nil)) sem_FdoubleList_0___ tree = S_FdoubleList_8 undefined sem_FdoubleList_1_Cons tree (S_FdoubleList_13 t1) (S_FdoubleList_11 t2) = S_FdoubleList_10 ((\(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_FdoubleList_1___ tree = S_FdoubleList_8 undefined sem_FdoubleList_2_Cons tree (S_FdoubleList_12 t1) (S_FdoubleList_10 t2) = S_FdoubleList_11 ((\(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) -> do let tv2 = r_v22 tv1 <- checkEqPrim r_v11 r_v21 return (tv1, tv2)) (\(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_FdoubleList_2_Nil tree = S_FdoubleList_11 (return () >>= (\() -> (\(r_x1) -> do (r_v11) <- return r_x1 return (r_v11)) Nil)) sem_FdoubleList_2___ tree = S_FdoubleList_8 undefined sem_FdoubleList_3___ tree = S_FdoubleList_12 (return tree) sem_FdoubleList_4___ tree = S_FdoubleList_13 (return tree) data StatesOfE12 e_0 = S_E12_0 e_0 e_E12 x = case trav_E12_0 x of S_E12_0 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E12" trav_E12_0 t = sem_E12_0___ t sem_E12_0___ tree = S_E12_0 (return tree) doubleList (Nil) = Nil doubleList (Cons a x) = Cons a (Cons a (doubleList x))