{-# OPTIONS -XNoMonomorphismRestriction #-} module DOUBLE (inv_Fdouble,double) where import Control.Monad import InvUtil import Data.Tuple import MyData inv_Fdouble = runI . e_Fdouble data StatesOfFdouble e_1 e_6 e_7 e_8 = S_Fdouble_1 e_1 | S_Fdouble_6 e_6 | S_Fdouble_7 e_7 | S_Fdouble_8 e_8 e_Fdouble x = case trav_Fdouble_0 x of S_Fdouble_1 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: Fdouble" trav_Fdouble_0 (Z) = sem_Fdouble_0_Z Z trav_Fdouble_0 (S t1) = sem_Fdouble_0_S (S t1) (trav_Fdouble_1 t1) trav_Fdouble_0 t = sem_Fdouble_0___ t trav_Fdouble_1 (S t1) = sem_Fdouble_1_S (S t1) (trav_Fdouble_2 t1) trav_Fdouble_1 t = sem_Fdouble_1___ t trav_Fdouble_2 (Z) = sem_Fdouble_2_Z Z trav_Fdouble_2 (S t1) = sem_Fdouble_2_S (S t1) (trav_Fdouble_1 t1) trav_Fdouble_2 t = sem_Fdouble_2___ t sem_Fdouble_0_S tree (S_Fdouble_7 t1) = S_Fdouble_1 ((\(x1_1) -> (do tmp_r1 <- x1_1 (\(r_v11) -> (\(r_v1) -> return (S r_v1)) (r_v11)) tmp_r1)) t1) sem_Fdouble_0_Z tree = S_Fdouble_1 (return () >>= (\() -> return Z)) sem_Fdouble_0___ tree = S_Fdouble_6 undefined sem_Fdouble_1_S tree (S_Fdouble_8 t1) = S_Fdouble_7 ((\(x1_1) -> (do tmp_r1 <- x1_1 (\(r_v11) -> return (r_v11)) tmp_r1)) t1) sem_Fdouble_1___ tree = S_Fdouble_6 undefined sem_Fdouble_2_S tree (S_Fdouble_7 t1) = S_Fdouble_8 ((\(x1_1) -> (do tmp_r1 <- x1_1 (\(r_v11) -> (\(r_v1) -> (\(r_x1) -> do (r_v11) <- return r_x1 return (r_v11)) (S r_v1)) (r_v11)) tmp_r1)) t1) sem_Fdouble_2_Z tree = S_Fdouble_8 (return () >>= (\() -> (\(r_x1) -> do (r_v11) <- return r_x1 return (r_v11)) Z)) sem_Fdouble_2___ tree = S_Fdouble_6 undefined data StatesOfE9 e_0 = S_E9_0 e_0 e_E9 x = case trav_E9_0 x of S_E9_0 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E9" trav_E9_0 t = sem_E9_0___ t sem_E9_0___ tree = S_E9_0 (return tree) double (Z) = Z double (S x) = S (S (double x))