{-# OPTIONS -cpp -O0  #-}

{-# LANGUAGE RankNTypes, ScopedTypeVariables, MultiParamTypeClasses, FlexibleInstances, TypeSynonymInstances #-}

module Curry.Module.FlatCurry (module Curry.Module.FlatCurry) where

import Curry.RunTimeSystem
import Curry.Module.Directory
import Curry.Module.Distribution
import Curry.Module.FileGoodies
import Curry.Module.Prelude
import Curry.Module.ReadShowTerm



-- begin included



-- end included

type C_QName = Curry.Module.Prelude.T2 (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char)

type C_TVarIndex = Curry.Module.Prelude.C_Int

type C_VarIndex = Curry.Module.Prelude.C_Int

data C_Prog = C_Prog (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) (Curry.Module.Prelude.List (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char)) (Curry.Module.Prelude.List Curry.Module.FlatCurry.C_TypeDecl) (Curry.Module.Prelude.List Curry.Module.FlatCurry.C_FuncDecl) (Curry.Module.Prelude.List Curry.Module.FlatCurry.C_OpDecl)
  | C_ProgFail Curry.RunTimeSystem.C_Exceptions
  | C_ProgOr Curry.RunTimeSystem.OrRef (Curry.RunTimeSystem.Branches Curry.Module.FlatCurry.C_Prog)

data C_Visibility = C_Public
  | C_Private
  | C_VisibilityFail Curry.RunTimeSystem.C_Exceptions
  | C_VisibilityOr Curry.RunTimeSystem.OrRef (Curry.RunTimeSystem.Branches Curry.Module.FlatCurry.C_Visibility)

data C_TypeDecl = C_Type (Curry.Module.Prelude.T2 (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char)) Curry.Module.FlatCurry.C_Visibility (Curry.Module.Prelude.List Curry.Module.Prelude.C_Int) (Curry.Module.Prelude.List Curry.Module.FlatCurry.C_ConsDecl)
  | C_TypeSyn (Curry.Module.Prelude.T2 (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char)) Curry.Module.FlatCurry.C_Visibility (Curry.Module.Prelude.List Curry.Module.Prelude.C_Int) Curry.Module.FlatCurry.C_TypeExpr
  | C_TypeDeclFail Curry.RunTimeSystem.C_Exceptions
  | C_TypeDeclOr Curry.RunTimeSystem.OrRef (Curry.RunTimeSystem.Branches Curry.Module.FlatCurry.C_TypeDecl)

data C_ConsDecl = C_Cons (Curry.Module.Prelude.T2 (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char)) Curry.Module.Prelude.C_Int Curry.Module.FlatCurry.C_Visibility (Curry.Module.Prelude.List Curry.Module.FlatCurry.C_TypeExpr)
  | C_ConsDeclFail Curry.RunTimeSystem.C_Exceptions
  | C_ConsDeclOr Curry.RunTimeSystem.OrRef (Curry.RunTimeSystem.Branches Curry.Module.FlatCurry.C_ConsDecl)

data C_TypeExpr = C_TVar Curry.Module.Prelude.C_Int
  | C_FuncType Curry.Module.FlatCurry.C_TypeExpr Curry.Module.FlatCurry.C_TypeExpr
  | C_TCons (Curry.Module.Prelude.T2 (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char)) (Curry.Module.Prelude.List Curry.Module.FlatCurry.C_TypeExpr)
  | C_TypeExprFail Curry.RunTimeSystem.C_Exceptions
  | C_TypeExprOr Curry.RunTimeSystem.OrRef (Curry.RunTimeSystem.Branches Curry.Module.FlatCurry.C_TypeExpr)

data C_OpDecl = C_Op (Curry.Module.Prelude.T2 (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char)) Curry.Module.FlatCurry.C_Fixity Curry.Module.Prelude.C_Int
  | C_OpDeclFail Curry.RunTimeSystem.C_Exceptions
  | C_OpDeclOr Curry.RunTimeSystem.OrRef (Curry.RunTimeSystem.Branches Curry.Module.FlatCurry.C_OpDecl)

data C_Fixity = C_InfixOp
  | C_InfixlOp
  | C_InfixrOp
  | C_FixityFail Curry.RunTimeSystem.C_Exceptions
  | C_FixityOr Curry.RunTimeSystem.OrRef (Curry.RunTimeSystem.Branches Curry.Module.FlatCurry.C_Fixity)

data C_FuncDecl = C_Func (Curry.Module.Prelude.T2 (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char)) Curry.Module.Prelude.C_Int Curry.Module.FlatCurry.C_Visibility Curry.Module.FlatCurry.C_TypeExpr Curry.Module.FlatCurry.C_Rule
  | C_FuncDeclFail Curry.RunTimeSystem.C_Exceptions
  | C_FuncDeclOr Curry.RunTimeSystem.OrRef (Curry.RunTimeSystem.Branches Curry.Module.FlatCurry.C_FuncDecl)

data C_Rule = C_Rule (Curry.Module.Prelude.List Curry.Module.Prelude.C_Int) Curry.Module.FlatCurry.C_Expr
  | C_External (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char)
  | C_RuleFail Curry.RunTimeSystem.C_Exceptions
  | C_RuleOr Curry.RunTimeSystem.OrRef (Curry.RunTimeSystem.Branches Curry.Module.FlatCurry.C_Rule)

data C_CaseType = C_Rigid
  | C_Flex
  | C_CaseTypeFail Curry.RunTimeSystem.C_Exceptions
  | C_CaseTypeOr Curry.RunTimeSystem.OrRef (Curry.RunTimeSystem.Branches Curry.Module.FlatCurry.C_CaseType)

data C_CombType = C_FuncCall
  | C_ConsCall
  | C_FuncPartCall Curry.Module.Prelude.C_Int
  | C_ConsPartCall Curry.Module.Prelude.C_Int
  | C_CombTypeFail Curry.RunTimeSystem.C_Exceptions
  | C_CombTypeOr Curry.RunTimeSystem.OrRef (Curry.RunTimeSystem.Branches Curry.Module.FlatCurry.C_CombType)

data C_Expr = C_Var Curry.Module.Prelude.C_Int
  | C_Lit Curry.Module.FlatCurry.C_Literal
  | C_Comb Curry.Module.FlatCurry.C_CombType (Curry.Module.Prelude.T2 (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char)) (Curry.Module.Prelude.List Curry.Module.FlatCurry.C_Expr)
  | C_Let (Curry.Module.Prelude.List (Curry.Module.Prelude.T2 Curry.Module.Prelude.C_Int Curry.Module.FlatCurry.C_Expr)) Curry.Module.FlatCurry.C_Expr
  | C_Free (Curry.Module.Prelude.List Curry.Module.Prelude.C_Int) Curry.Module.FlatCurry.C_Expr
  | C_Or Curry.Module.FlatCurry.C_Expr Curry.Module.FlatCurry.C_Expr
  | C_Case Curry.Module.FlatCurry.C_CaseType Curry.Module.FlatCurry.C_Expr (Curry.Module.Prelude.List Curry.Module.FlatCurry.C_BranchExpr)
  | C_ExprFail Curry.RunTimeSystem.C_Exceptions
  | C_ExprOr Curry.RunTimeSystem.OrRef (Curry.RunTimeSystem.Branches Curry.Module.FlatCurry.C_Expr)

data C_BranchExpr = C_Branch Curry.Module.FlatCurry.C_Pattern Curry.Module.FlatCurry.C_Expr
  | C_BranchExprFail Curry.RunTimeSystem.C_Exceptions
  | C_BranchExprOr Curry.RunTimeSystem.OrRef (Curry.RunTimeSystem.Branches Curry.Module.FlatCurry.C_BranchExpr)

data C_Pattern = C_Pattern (Curry.Module.Prelude.T2 (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char)) (Curry.Module.Prelude.List Curry.Module.Prelude.C_Int)
  | C_LPattern Curry.Module.FlatCurry.C_Literal
  | C_PatternFail Curry.RunTimeSystem.C_Exceptions
  | C_PatternOr Curry.RunTimeSystem.OrRef (Curry.RunTimeSystem.Branches Curry.Module.FlatCurry.C_Pattern)

data C_Literal = C_Intc Curry.Module.Prelude.C_Int
  | C_Floatc Curry.Module.Prelude.C_Float
  | C_Charc Curry.Module.Prelude.C_Char
  | C_LiteralFail Curry.RunTimeSystem.C_Exceptions
  | C_LiteralOr Curry.RunTimeSystem.OrRef (Curry.RunTimeSystem.Branches Curry.Module.FlatCurry.C_Literal)

instance BaseCurry Curry.Module.FlatCurry.C_Prog where
  nf f (Curry.Module.FlatCurry.C_Prog x1 x2 x3 x4 x5) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> Curry.RunTimeSystem.nfCTC(\ v2 state2 -> Curry.RunTimeSystem.nfCTC(\ v3 state3 -> Curry.RunTimeSystem.nfCTC(\ v4 state4 -> Curry.RunTimeSystem.nfCTC(\ v5 state5 -> f(Curry.Module.FlatCurry.C_Prog(v1)(v2)(v3)(v4)(v5))(state5))(x5)(state4))(x4)(state3))(x3)(state2))(x2)(state1))(x1)(state0)
  nf f x st = f(x)(st)

  gnf f (Curry.Module.FlatCurry.C_Prog x1 x2 x3 x4 x5) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> Curry.RunTimeSystem.gnfCTC(\ v2 state2 -> Curry.RunTimeSystem.gnfCTC(\ v3 state3 -> Curry.RunTimeSystem.gnfCTC(\ v4 state4 -> Curry.RunTimeSystem.gnfCTC(\ v5 state5 -> f(Curry.Module.FlatCurry.C_Prog(v1)(v2)(v3)(v4)(v5))(state5))(x5)(state4))(x4)(state3))(x3)(state2))(x2)(state1))(x1)(state0)
  gnf f x st = f(x)(st)

  generator i = Curry.RunTimeSystem.withRef(\ r -> Curry.Module.FlatCurry.C_ProgOr(Curry.RunTimeSystem.mkRef(r)(5)(i))([Curry.Module.FlatCurry.C_Prog(Curry.RunTimeSystem.generator((Prelude.+)(r)((4::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((3::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((2::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((1::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int))))]))(5)

  failed  = Curry.Module.FlatCurry.C_ProgFail

  branching  = Curry.Module.FlatCurry.C_ProgOr

  consKind (Curry.Module.FlatCurry.C_ProgOr _ _) = Curry.RunTimeSystem.Branching
  consKind (Curry.Module.FlatCurry.C_ProgFail _) = Curry.RunTimeSystem.Failed
  consKind _ = Curry.RunTimeSystem.Val

  exceptions (Curry.Module.FlatCurry.C_ProgFail x) = x

  orRef (Curry.Module.FlatCurry.C_ProgOr x _) = x

  branches (Curry.Module.FlatCurry.C_ProgOr _ x) = x





instance BaseCurry Curry.Module.FlatCurry.C_Visibility where
  nf f x st = f(x)(st)

  gnf f x st = f(x)(st)

  generator i = Curry.RunTimeSystem.withRef(\ r -> Curry.Module.FlatCurry.C_VisibilityOr(Curry.RunTimeSystem.mkRef(r)(0)(i))([Curry.Module.FlatCurry.C_Public,Curry.Module.FlatCurry.C_Private]))(0)

  failed  = Curry.Module.FlatCurry.C_VisibilityFail

  branching  = Curry.Module.FlatCurry.C_VisibilityOr

  consKind (Curry.Module.FlatCurry.C_VisibilityOr _ _) = Curry.RunTimeSystem.Branching
  consKind (Curry.Module.FlatCurry.C_VisibilityFail _) = Curry.RunTimeSystem.Failed
  consKind _ = Curry.RunTimeSystem.Val

  exceptions (Curry.Module.FlatCurry.C_VisibilityFail x) = x

  orRef (Curry.Module.FlatCurry.C_VisibilityOr x _) = x

  branches (Curry.Module.FlatCurry.C_VisibilityOr _ x) = x





instance BaseCurry Curry.Module.FlatCurry.C_TypeDecl where
  nf f (Curry.Module.FlatCurry.C_Type x1 x2 x3 x4) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> Curry.RunTimeSystem.nfCTC(\ v2 state2 -> Curry.RunTimeSystem.nfCTC(\ v3 state3 -> Curry.RunTimeSystem.nfCTC(\ v4 state4 -> f(Curry.Module.FlatCurry.C_Type(v1)(v2)(v3)(v4))(state4))(x4)(state3))(x3)(state2))(x2)(state1))(x1)(state0)
  nf f (Curry.Module.FlatCurry.C_TypeSyn x1 x2 x3 x4) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> Curry.RunTimeSystem.nfCTC(\ v2 state2 -> Curry.RunTimeSystem.nfCTC(\ v3 state3 -> Curry.RunTimeSystem.nfCTC(\ v4 state4 -> f(Curry.Module.FlatCurry.C_TypeSyn(v1)(v2)(v3)(v4))(state4))(x4)(state3))(x3)(state2))(x2)(state1))(x1)(state0)
  nf f x st = f(x)(st)

  gnf f (Curry.Module.FlatCurry.C_Type x1 x2 x3 x4) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> Curry.RunTimeSystem.gnfCTC(\ v2 state2 -> Curry.RunTimeSystem.gnfCTC(\ v3 state3 -> Curry.RunTimeSystem.gnfCTC(\ v4 state4 -> f(Curry.Module.FlatCurry.C_Type(v1)(v2)(v3)(v4))(state4))(x4)(state3))(x3)(state2))(x2)(state1))(x1)(state0)
  gnf f (Curry.Module.FlatCurry.C_TypeSyn x1 x2 x3 x4) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> Curry.RunTimeSystem.gnfCTC(\ v2 state2 -> Curry.RunTimeSystem.gnfCTC(\ v3 state3 -> Curry.RunTimeSystem.gnfCTC(\ v4 state4 -> f(Curry.Module.FlatCurry.C_TypeSyn(v1)(v2)(v3)(v4))(state4))(x4)(state3))(x3)(state2))(x2)(state1))(x1)(state0)
  gnf f x st = f(x)(st)

  generator i = Curry.RunTimeSystem.withRef(\ r -> Curry.Module.FlatCurry.C_TypeDeclOr(Curry.RunTimeSystem.mkRef(r)(4)(i))([Curry.Module.FlatCurry.C_Type(Curry.RunTimeSystem.generator((Prelude.+)(r)((3::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((2::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((1::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int)))),Curry.Module.FlatCurry.C_TypeSyn(Curry.RunTimeSystem.generator((Prelude.+)(r)((3::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((2::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((1::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int))))]))(4)

  failed  = Curry.Module.FlatCurry.C_TypeDeclFail

  branching  = Curry.Module.FlatCurry.C_TypeDeclOr

  consKind (Curry.Module.FlatCurry.C_TypeDeclOr _ _) = Curry.RunTimeSystem.Branching
  consKind (Curry.Module.FlatCurry.C_TypeDeclFail _) = Curry.RunTimeSystem.Failed
  consKind _ = Curry.RunTimeSystem.Val

  exceptions (Curry.Module.FlatCurry.C_TypeDeclFail x) = x

  orRef (Curry.Module.FlatCurry.C_TypeDeclOr x _) = x

  branches (Curry.Module.FlatCurry.C_TypeDeclOr _ x) = x





instance BaseCurry Curry.Module.FlatCurry.C_ConsDecl where
  nf f (Curry.Module.FlatCurry.C_Cons x1 x2 x3 x4) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> Curry.RunTimeSystem.nfCTC(\ v2 state2 -> Curry.RunTimeSystem.nfCTC(\ v3 state3 -> Curry.RunTimeSystem.nfCTC(\ v4 state4 -> f(Curry.Module.FlatCurry.C_Cons(v1)(v2)(v3)(v4))(state4))(x4)(state3))(x3)(state2))(x2)(state1))(x1)(state0)
  nf f x st = f(x)(st)

  gnf f (Curry.Module.FlatCurry.C_Cons x1 x2 x3 x4) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> Curry.RunTimeSystem.gnfCTC(\ v2 state2 -> Curry.RunTimeSystem.gnfCTC(\ v3 state3 -> Curry.RunTimeSystem.gnfCTC(\ v4 state4 -> f(Curry.Module.FlatCurry.C_Cons(v1)(v2)(v3)(v4))(state4))(x4)(state3))(x3)(state2))(x2)(state1))(x1)(state0)
  gnf f x st = f(x)(st)

  generator i = Curry.RunTimeSystem.withRef(\ r -> Curry.Module.FlatCurry.C_ConsDeclOr(Curry.RunTimeSystem.mkRef(r)(4)(i))([Curry.Module.FlatCurry.C_Cons(Curry.RunTimeSystem.generator((Prelude.+)(r)((3::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((2::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((1::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int))))]))(4)

  failed  = Curry.Module.FlatCurry.C_ConsDeclFail

  branching  = Curry.Module.FlatCurry.C_ConsDeclOr

  consKind (Curry.Module.FlatCurry.C_ConsDeclOr _ _) = Curry.RunTimeSystem.Branching
  consKind (Curry.Module.FlatCurry.C_ConsDeclFail _) = Curry.RunTimeSystem.Failed
  consKind _ = Curry.RunTimeSystem.Val

  exceptions (Curry.Module.FlatCurry.C_ConsDeclFail x) = x

  orRef (Curry.Module.FlatCurry.C_ConsDeclOr x _) = x

  branches (Curry.Module.FlatCurry.C_ConsDeclOr _ x) = x





instance BaseCurry Curry.Module.FlatCurry.C_TypeExpr where
  nf f (Curry.Module.FlatCurry.C_TVar x1) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_TVar(v1))(state1))(x1)(state0)
  nf f (Curry.Module.FlatCurry.C_FuncType x1 x2) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> Curry.RunTimeSystem.nfCTC(\ v2 state2 -> f(Curry.Module.FlatCurry.C_FuncType(v1)(v2))(state2))(x2)(state1))(x1)(state0)
  nf f (Curry.Module.FlatCurry.C_TCons x1 x2) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> Curry.RunTimeSystem.nfCTC(\ v2 state2 -> f(Curry.Module.FlatCurry.C_TCons(v1)(v2))(state2))(x2)(state1))(x1)(state0)
  nf f x st = f(x)(st)

  gnf f (Curry.Module.FlatCurry.C_TVar x1) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_TVar(v1))(state1))(x1)(state0)
  gnf f (Curry.Module.FlatCurry.C_FuncType x1 x2) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> Curry.RunTimeSystem.gnfCTC(\ v2 state2 -> f(Curry.Module.FlatCurry.C_FuncType(v1)(v2))(state2))(x2)(state1))(x1)(state0)
  gnf f (Curry.Module.FlatCurry.C_TCons x1 x2) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> Curry.RunTimeSystem.gnfCTC(\ v2 state2 -> f(Curry.Module.FlatCurry.C_TCons(v1)(v2))(state2))(x2)(state1))(x1)(state0)
  gnf f x st = f(x)(st)

  generator i = Curry.RunTimeSystem.withRef(\ r -> Curry.Module.FlatCurry.C_TypeExprOr(Curry.RunTimeSystem.mkRef(r)(2)(i))([Curry.Module.FlatCurry.C_TVar(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int)))),Curry.Module.FlatCurry.C_FuncType(Curry.RunTimeSystem.generator((Prelude.+)(r)((1::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int)))),Curry.Module.FlatCurry.C_TCons(Curry.RunTimeSystem.generator((Prelude.+)(r)((1::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int))))]))(2)

  failed  = Curry.Module.FlatCurry.C_TypeExprFail

  branching  = Curry.Module.FlatCurry.C_TypeExprOr

  consKind (Curry.Module.FlatCurry.C_TypeExprOr _ _) = Curry.RunTimeSystem.Branching
  consKind (Curry.Module.FlatCurry.C_TypeExprFail _) = Curry.RunTimeSystem.Failed
  consKind _ = Curry.RunTimeSystem.Val

  exceptions (Curry.Module.FlatCurry.C_TypeExprFail x) = x

  orRef (Curry.Module.FlatCurry.C_TypeExprOr x _) = x

  branches (Curry.Module.FlatCurry.C_TypeExprOr _ x) = x





instance BaseCurry Curry.Module.FlatCurry.C_OpDecl where
  nf f (Curry.Module.FlatCurry.C_Op x1 x2 x3) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> Curry.RunTimeSystem.nfCTC(\ v2 state2 -> Curry.RunTimeSystem.nfCTC(\ v3 state3 -> f(Curry.Module.FlatCurry.C_Op(v1)(v2)(v3))(state3))(x3)(state2))(x2)(state1))(x1)(state0)
  nf f x st = f(x)(st)

  gnf f (Curry.Module.FlatCurry.C_Op x1 x2 x3) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> Curry.RunTimeSystem.gnfCTC(\ v2 state2 -> Curry.RunTimeSystem.gnfCTC(\ v3 state3 -> f(Curry.Module.FlatCurry.C_Op(v1)(v2)(v3))(state3))(x3)(state2))(x2)(state1))(x1)(state0)
  gnf f x st = f(x)(st)

  generator i = Curry.RunTimeSystem.withRef(\ r -> Curry.Module.FlatCurry.C_OpDeclOr(Curry.RunTimeSystem.mkRef(r)(3)(i))([Curry.Module.FlatCurry.C_Op(Curry.RunTimeSystem.generator((Prelude.+)(r)((2::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((1::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int))))]))(3)

  failed  = Curry.Module.FlatCurry.C_OpDeclFail

  branching  = Curry.Module.FlatCurry.C_OpDeclOr

  consKind (Curry.Module.FlatCurry.C_OpDeclOr _ _) = Curry.RunTimeSystem.Branching
  consKind (Curry.Module.FlatCurry.C_OpDeclFail _) = Curry.RunTimeSystem.Failed
  consKind _ = Curry.RunTimeSystem.Val

  exceptions (Curry.Module.FlatCurry.C_OpDeclFail x) = x

  orRef (Curry.Module.FlatCurry.C_OpDeclOr x _) = x

  branches (Curry.Module.FlatCurry.C_OpDeclOr _ x) = x





instance BaseCurry Curry.Module.FlatCurry.C_Fixity where
  nf f x st = f(x)(st)

  gnf f x st = f(x)(st)

  generator i = Curry.RunTimeSystem.withRef(\ r -> Curry.Module.FlatCurry.C_FixityOr(Curry.RunTimeSystem.mkRef(r)(0)(i))([Curry.Module.FlatCurry.C_InfixOp,Curry.Module.FlatCurry.C_InfixlOp,Curry.Module.FlatCurry.C_InfixrOp]))(0)

  failed  = Curry.Module.FlatCurry.C_FixityFail

  branching  = Curry.Module.FlatCurry.C_FixityOr

  consKind (Curry.Module.FlatCurry.C_FixityOr _ _) = Curry.RunTimeSystem.Branching
  consKind (Curry.Module.FlatCurry.C_FixityFail _) = Curry.RunTimeSystem.Failed
  consKind _ = Curry.RunTimeSystem.Val

  exceptions (Curry.Module.FlatCurry.C_FixityFail x) = x

  orRef (Curry.Module.FlatCurry.C_FixityOr x _) = x

  branches (Curry.Module.FlatCurry.C_FixityOr _ x) = x





instance BaseCurry Curry.Module.FlatCurry.C_FuncDecl where
  nf f (Curry.Module.FlatCurry.C_Func x1 x2 x3 x4 x5) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> Curry.RunTimeSystem.nfCTC(\ v2 state2 -> Curry.RunTimeSystem.nfCTC(\ v3 state3 -> Curry.RunTimeSystem.nfCTC(\ v4 state4 -> Curry.RunTimeSystem.nfCTC(\ v5 state5 -> f(Curry.Module.FlatCurry.C_Func(v1)(v2)(v3)(v4)(v5))(state5))(x5)(state4))(x4)(state3))(x3)(state2))(x2)(state1))(x1)(state0)
  nf f x st = f(x)(st)

  gnf f (Curry.Module.FlatCurry.C_Func x1 x2 x3 x4 x5) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> Curry.RunTimeSystem.gnfCTC(\ v2 state2 -> Curry.RunTimeSystem.gnfCTC(\ v3 state3 -> Curry.RunTimeSystem.gnfCTC(\ v4 state4 -> Curry.RunTimeSystem.gnfCTC(\ v5 state5 -> f(Curry.Module.FlatCurry.C_Func(v1)(v2)(v3)(v4)(v5))(state5))(x5)(state4))(x4)(state3))(x3)(state2))(x2)(state1))(x1)(state0)
  gnf f x st = f(x)(st)

  generator i = Curry.RunTimeSystem.withRef(\ r -> Curry.Module.FlatCurry.C_FuncDeclOr(Curry.RunTimeSystem.mkRef(r)(5)(i))([Curry.Module.FlatCurry.C_Func(Curry.RunTimeSystem.generator((Prelude.+)(r)((4::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((3::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((2::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((1::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int))))]))(5)

  failed  = Curry.Module.FlatCurry.C_FuncDeclFail

  branching  = Curry.Module.FlatCurry.C_FuncDeclOr

  consKind (Curry.Module.FlatCurry.C_FuncDeclOr _ _) = Curry.RunTimeSystem.Branching
  consKind (Curry.Module.FlatCurry.C_FuncDeclFail _) = Curry.RunTimeSystem.Failed
  consKind _ = Curry.RunTimeSystem.Val

  exceptions (Curry.Module.FlatCurry.C_FuncDeclFail x) = x

  orRef (Curry.Module.FlatCurry.C_FuncDeclOr x _) = x

  branches (Curry.Module.FlatCurry.C_FuncDeclOr _ x) = x





instance BaseCurry Curry.Module.FlatCurry.C_Rule where
  nf f (Curry.Module.FlatCurry.C_Rule x1 x2) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> Curry.RunTimeSystem.nfCTC(\ v2 state2 -> f(Curry.Module.FlatCurry.C_Rule(v1)(v2))(state2))(x2)(state1))(x1)(state0)
  nf f (Curry.Module.FlatCurry.C_External x1) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_External(v1))(state1))(x1)(state0)
  nf f x st = f(x)(st)

  gnf f (Curry.Module.FlatCurry.C_Rule x1 x2) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> Curry.RunTimeSystem.gnfCTC(\ v2 state2 -> f(Curry.Module.FlatCurry.C_Rule(v1)(v2))(state2))(x2)(state1))(x1)(state0)
  gnf f (Curry.Module.FlatCurry.C_External x1) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_External(v1))(state1))(x1)(state0)
  gnf f x st = f(x)(st)

  generator i = Curry.RunTimeSystem.withRef(\ r -> Curry.Module.FlatCurry.C_RuleOr(Curry.RunTimeSystem.mkRef(r)(2)(i))([Curry.Module.FlatCurry.C_Rule(Curry.RunTimeSystem.generator((Prelude.+)(r)((1::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int)))),Curry.Module.FlatCurry.C_External(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int))))]))(2)

  failed  = Curry.Module.FlatCurry.C_RuleFail

  branching  = Curry.Module.FlatCurry.C_RuleOr

  consKind (Curry.Module.FlatCurry.C_RuleOr _ _) = Curry.RunTimeSystem.Branching
  consKind (Curry.Module.FlatCurry.C_RuleFail _) = Curry.RunTimeSystem.Failed
  consKind _ = Curry.RunTimeSystem.Val

  exceptions (Curry.Module.FlatCurry.C_RuleFail x) = x

  orRef (Curry.Module.FlatCurry.C_RuleOr x _) = x

  branches (Curry.Module.FlatCurry.C_RuleOr _ x) = x





instance BaseCurry Curry.Module.FlatCurry.C_CaseType where
  nf f x st = f(x)(st)

  gnf f x st = f(x)(st)

  generator i = Curry.RunTimeSystem.withRef(\ r -> Curry.Module.FlatCurry.C_CaseTypeOr(Curry.RunTimeSystem.mkRef(r)(0)(i))([Curry.Module.FlatCurry.C_Rigid,Curry.Module.FlatCurry.C_Flex]))(0)

  failed  = Curry.Module.FlatCurry.C_CaseTypeFail

  branching  = Curry.Module.FlatCurry.C_CaseTypeOr

  consKind (Curry.Module.FlatCurry.C_CaseTypeOr _ _) = Curry.RunTimeSystem.Branching
  consKind (Curry.Module.FlatCurry.C_CaseTypeFail _) = Curry.RunTimeSystem.Failed
  consKind _ = Curry.RunTimeSystem.Val

  exceptions (Curry.Module.FlatCurry.C_CaseTypeFail x) = x

  orRef (Curry.Module.FlatCurry.C_CaseTypeOr x _) = x

  branches (Curry.Module.FlatCurry.C_CaseTypeOr _ x) = x





instance BaseCurry Curry.Module.FlatCurry.C_CombType where
  nf f (Curry.Module.FlatCurry.C_FuncPartCall x1) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_FuncPartCall(v1))(state1))(x1)(state0)
  nf f (Curry.Module.FlatCurry.C_ConsPartCall x1) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_ConsPartCall(v1))(state1))(x1)(state0)
  nf f x st = f(x)(st)

  gnf f (Curry.Module.FlatCurry.C_FuncPartCall x1) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_FuncPartCall(v1))(state1))(x1)(state0)
  gnf f (Curry.Module.FlatCurry.C_ConsPartCall x1) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_ConsPartCall(v1))(state1))(x1)(state0)
  gnf f x st = f(x)(st)

  generator i = Curry.RunTimeSystem.withRef(\ r -> Curry.Module.FlatCurry.C_CombTypeOr(Curry.RunTimeSystem.mkRef(r)(1)(i))([Curry.Module.FlatCurry.C_FuncCall,Curry.Module.FlatCurry.C_ConsCall,Curry.Module.FlatCurry.C_FuncPartCall(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int)))),Curry.Module.FlatCurry.C_ConsPartCall(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int))))]))(1)

  failed  = Curry.Module.FlatCurry.C_CombTypeFail

  branching  = Curry.Module.FlatCurry.C_CombTypeOr

  consKind (Curry.Module.FlatCurry.C_CombTypeOr _ _) = Curry.RunTimeSystem.Branching
  consKind (Curry.Module.FlatCurry.C_CombTypeFail _) = Curry.RunTimeSystem.Failed
  consKind _ = Curry.RunTimeSystem.Val

  exceptions (Curry.Module.FlatCurry.C_CombTypeFail x) = x

  orRef (Curry.Module.FlatCurry.C_CombTypeOr x _) = x

  branches (Curry.Module.FlatCurry.C_CombTypeOr _ x) = x





instance BaseCurry Curry.Module.FlatCurry.C_Expr where
  nf f (Curry.Module.FlatCurry.C_Var x1) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_Var(v1))(state1))(x1)(state0)
  nf f (Curry.Module.FlatCurry.C_Lit x1) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_Lit(v1))(state1))(x1)(state0)
  nf f (Curry.Module.FlatCurry.C_Comb x1 x2 x3) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> Curry.RunTimeSystem.nfCTC(\ v2 state2 -> Curry.RunTimeSystem.nfCTC(\ v3 state3 -> f(Curry.Module.FlatCurry.C_Comb(v1)(v2)(v3))(state3))(x3)(state2))(x2)(state1))(x1)(state0)
  nf f (Curry.Module.FlatCurry.C_Let x1 x2) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> Curry.RunTimeSystem.nfCTC(\ v2 state2 -> f(Curry.Module.FlatCurry.C_Let(v1)(v2))(state2))(x2)(state1))(x1)(state0)
  nf f (Curry.Module.FlatCurry.C_Free x1 x2) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> Curry.RunTimeSystem.nfCTC(\ v2 state2 -> f(Curry.Module.FlatCurry.C_Free(v1)(v2))(state2))(x2)(state1))(x1)(state0)
  nf f (Curry.Module.FlatCurry.C_Or x1 x2) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> Curry.RunTimeSystem.nfCTC(\ v2 state2 -> f(Curry.Module.FlatCurry.C_Or(v1)(v2))(state2))(x2)(state1))(x1)(state0)
  nf f (Curry.Module.FlatCurry.C_Case x1 x2 x3) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> Curry.RunTimeSystem.nfCTC(\ v2 state2 -> Curry.RunTimeSystem.nfCTC(\ v3 state3 -> f(Curry.Module.FlatCurry.C_Case(v1)(v2)(v3))(state3))(x3)(state2))(x2)(state1))(x1)(state0)
  nf f x st = f(x)(st)

  gnf f (Curry.Module.FlatCurry.C_Var x1) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_Var(v1))(state1))(x1)(state0)
  gnf f (Curry.Module.FlatCurry.C_Lit x1) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_Lit(v1))(state1))(x1)(state0)
  gnf f (Curry.Module.FlatCurry.C_Comb x1 x2 x3) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> Curry.RunTimeSystem.gnfCTC(\ v2 state2 -> Curry.RunTimeSystem.gnfCTC(\ v3 state3 -> f(Curry.Module.FlatCurry.C_Comb(v1)(v2)(v3))(state3))(x3)(state2))(x2)(state1))(x1)(state0)
  gnf f (Curry.Module.FlatCurry.C_Let x1 x2) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> Curry.RunTimeSystem.gnfCTC(\ v2 state2 -> f(Curry.Module.FlatCurry.C_Let(v1)(v2))(state2))(x2)(state1))(x1)(state0)
  gnf f (Curry.Module.FlatCurry.C_Free x1 x2) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> Curry.RunTimeSystem.gnfCTC(\ v2 state2 -> f(Curry.Module.FlatCurry.C_Free(v1)(v2))(state2))(x2)(state1))(x1)(state0)
  gnf f (Curry.Module.FlatCurry.C_Or x1 x2) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> Curry.RunTimeSystem.gnfCTC(\ v2 state2 -> f(Curry.Module.FlatCurry.C_Or(v1)(v2))(state2))(x2)(state1))(x1)(state0)
  gnf f (Curry.Module.FlatCurry.C_Case x1 x2 x3) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> Curry.RunTimeSystem.gnfCTC(\ v2 state2 -> Curry.RunTimeSystem.gnfCTC(\ v3 state3 -> f(Curry.Module.FlatCurry.C_Case(v1)(v2)(v3))(state3))(x3)(state2))(x2)(state1))(x1)(state0)
  gnf f x st = f(x)(st)

  generator i = Curry.RunTimeSystem.withRef(\ r -> Curry.Module.FlatCurry.C_ExprOr(Curry.RunTimeSystem.mkRef(r)(3)(i))([Curry.Module.FlatCurry.C_Var(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int)))),Curry.Module.FlatCurry.C_Lit(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int)))),Curry.Module.FlatCurry.C_Comb(Curry.RunTimeSystem.generator((Prelude.+)(r)((2::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((1::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int)))),Curry.Module.FlatCurry.C_Let(Curry.RunTimeSystem.generator((Prelude.+)(r)((1::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int)))),Curry.Module.FlatCurry.C_Free(Curry.RunTimeSystem.generator((Prelude.+)(r)((1::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int)))),Curry.Module.FlatCurry.C_Or(Curry.RunTimeSystem.generator((Prelude.+)(r)((1::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int)))),Curry.Module.FlatCurry.C_Case(Curry.RunTimeSystem.generator((Prelude.+)(r)((2::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((1::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int))))]))(3)

  failed  = Curry.Module.FlatCurry.C_ExprFail

  branching  = Curry.Module.FlatCurry.C_ExprOr

  consKind (Curry.Module.FlatCurry.C_ExprOr _ _) = Curry.RunTimeSystem.Branching
  consKind (Curry.Module.FlatCurry.C_ExprFail _) = Curry.RunTimeSystem.Failed
  consKind _ = Curry.RunTimeSystem.Val

  exceptions (Curry.Module.FlatCurry.C_ExprFail x) = x

  orRef (Curry.Module.FlatCurry.C_ExprOr x _) = x

  branches (Curry.Module.FlatCurry.C_ExprOr _ x) = x





instance BaseCurry Curry.Module.FlatCurry.C_BranchExpr where
  nf f (Curry.Module.FlatCurry.C_Branch x1 x2) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> Curry.RunTimeSystem.nfCTC(\ v2 state2 -> f(Curry.Module.FlatCurry.C_Branch(v1)(v2))(state2))(x2)(state1))(x1)(state0)
  nf f x st = f(x)(st)

  gnf f (Curry.Module.FlatCurry.C_Branch x1 x2) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> Curry.RunTimeSystem.gnfCTC(\ v2 state2 -> f(Curry.Module.FlatCurry.C_Branch(v1)(v2))(state2))(x2)(state1))(x1)(state0)
  gnf f x st = f(x)(st)

  generator i = Curry.RunTimeSystem.withRef(\ r -> Curry.Module.FlatCurry.C_BranchExprOr(Curry.RunTimeSystem.mkRef(r)(2)(i))([Curry.Module.FlatCurry.C_Branch(Curry.RunTimeSystem.generator((Prelude.+)(r)((1::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int))))]))(2)

  failed  = Curry.Module.FlatCurry.C_BranchExprFail

  branching  = Curry.Module.FlatCurry.C_BranchExprOr

  consKind (Curry.Module.FlatCurry.C_BranchExprOr _ _) = Curry.RunTimeSystem.Branching
  consKind (Curry.Module.FlatCurry.C_BranchExprFail _) = Curry.RunTimeSystem.Failed
  consKind _ = Curry.RunTimeSystem.Val

  exceptions (Curry.Module.FlatCurry.C_BranchExprFail x) = x

  orRef (Curry.Module.FlatCurry.C_BranchExprOr x _) = x

  branches (Curry.Module.FlatCurry.C_BranchExprOr _ x) = x





instance BaseCurry Curry.Module.FlatCurry.C_Pattern where
  nf f (Curry.Module.FlatCurry.C_Pattern x1 x2) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> Curry.RunTimeSystem.nfCTC(\ v2 state2 -> f(Curry.Module.FlatCurry.C_Pattern(v1)(v2))(state2))(x2)(state1))(x1)(state0)
  nf f (Curry.Module.FlatCurry.C_LPattern x1) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_LPattern(v1))(state1))(x1)(state0)
  nf f x st = f(x)(st)

  gnf f (Curry.Module.FlatCurry.C_Pattern x1 x2) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> Curry.RunTimeSystem.gnfCTC(\ v2 state2 -> f(Curry.Module.FlatCurry.C_Pattern(v1)(v2))(state2))(x2)(state1))(x1)(state0)
  gnf f (Curry.Module.FlatCurry.C_LPattern x1) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_LPattern(v1))(state1))(x1)(state0)
  gnf f x st = f(x)(st)

  generator i = Curry.RunTimeSystem.withRef(\ r -> Curry.Module.FlatCurry.C_PatternOr(Curry.RunTimeSystem.mkRef(r)(2)(i))([Curry.Module.FlatCurry.C_Pattern(Curry.RunTimeSystem.generator((Prelude.+)(r)((1::Int))))(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int)))),Curry.Module.FlatCurry.C_LPattern(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int))))]))(2)

  failed  = Curry.Module.FlatCurry.C_PatternFail

  branching  = Curry.Module.FlatCurry.C_PatternOr

  consKind (Curry.Module.FlatCurry.C_PatternOr _ _) = Curry.RunTimeSystem.Branching
  consKind (Curry.Module.FlatCurry.C_PatternFail _) = Curry.RunTimeSystem.Failed
  consKind _ = Curry.RunTimeSystem.Val

  exceptions (Curry.Module.FlatCurry.C_PatternFail x) = x

  orRef (Curry.Module.FlatCurry.C_PatternOr x _) = x

  branches (Curry.Module.FlatCurry.C_PatternOr _ x) = x





instance BaseCurry Curry.Module.FlatCurry.C_Literal where
  nf f (Curry.Module.FlatCurry.C_Intc x1) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_Intc(v1))(state1))(x1)(state0)
  nf f (Curry.Module.FlatCurry.C_Floatc x1) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_Floatc(v1))(state1))(x1)(state0)
  nf f (Curry.Module.FlatCurry.C_Charc x1) state0 = Curry.RunTimeSystem.nfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_Charc(v1))(state1))(x1)(state0)
  nf f x st = f(x)(st)

  gnf f (Curry.Module.FlatCurry.C_Intc x1) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_Intc(v1))(state1))(x1)(state0)
  gnf f (Curry.Module.FlatCurry.C_Floatc x1) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_Floatc(v1))(state1))(x1)(state0)
  gnf f (Curry.Module.FlatCurry.C_Charc x1) state0 = Curry.RunTimeSystem.gnfCTC(\ v1 state1 -> f(Curry.Module.FlatCurry.C_Charc(v1))(state1))(x1)(state0)
  gnf f x st = f(x)(st)

  generator i = Curry.RunTimeSystem.withRef(\ r -> Curry.Module.FlatCurry.C_LiteralOr(Curry.RunTimeSystem.mkRef(r)(1)(i))([Curry.Module.FlatCurry.C_Intc(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int)))),Curry.Module.FlatCurry.C_Floatc(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int)))),Curry.Module.FlatCurry.C_Charc(Curry.RunTimeSystem.generator((Prelude.+)(r)((0::Int))))]))(1)

  failed  = Curry.Module.FlatCurry.C_LiteralFail

  branching  = Curry.Module.FlatCurry.C_LiteralOr

  consKind (Curry.Module.FlatCurry.C_LiteralOr _ _) = Curry.RunTimeSystem.Branching
  consKind (Curry.Module.FlatCurry.C_LiteralFail _) = Curry.RunTimeSystem.Failed
  consKind _ = Curry.RunTimeSystem.Val

  exceptions (Curry.Module.FlatCurry.C_LiteralFail x) = x

  orRef (Curry.Module.FlatCurry.C_LiteralOr x _) = x

  branches (Curry.Module.FlatCurry.C_LiteralOr _ x) = x





instance Curry Curry.Module.FlatCurry.C_Prog where
  strEq (Curry.Module.FlatCurry.C_Prog x1 x2 x3 x4 x5) (Curry.Module.FlatCurry.C_Prog y1 y2 y3 y4 y5) st = Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x1)(y1)(st))(Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x2)(y2)(st))(Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x3)(y3)(st))(Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x4)(y4)(st))(Curry.Module.Prelude.genStrEq(x5)(y5)(st))(st))(st))(st))(st)
  strEq _ x0 _ = Curry.Module.Prelude.strEqFail(Curry.Module.Prelude.typeName(x0))

  eq (Curry.Module.FlatCurry.C_Prog x1 x2 x3 x4 x5) (Curry.Module.FlatCurry.C_Prog y1 y2 y3 y4 y5) st = Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x1)(y1)(st))(Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x2)(y2)(st))(Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x3)(y3)(st))(Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x4)(y4)(st))(Curry.Module.Prelude.genEq(x5)(y5)(st))(st))(st))(st))(st)
  eq _ _ _ = Curry.Module.Prelude.C_False

  propagate f (Curry.Module.FlatCurry.C_Prog x1 x2 x3 x4 x5) st = Curry.Module.FlatCurry.C_Prog(f((0::Int))(x1)(st))(f((1::Int))(x2)(st))(f((2::Int))(x3)(st))(f((3::Int))(x4)(st))(f((4::Int))(x5)(st))

  foldCurry f c (Curry.Module.FlatCurry.C_Prog x1 x2 x3 x4 x5) st = f(x1)(f(x2)(f(x3)(f(x4)(f(x5)(c)(st))(st))(st))(st))(st)

  typeName _ = "Prog"

  showQ d (Curry.Module.FlatCurry.C_Prog x1 x2 x3 x4 x5) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Prog "))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x2))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x3))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x4))((Prelude..)(Prelude.showChar(' '))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x5))))))))))


  showQ _ (Curry.Module.FlatCurry.C_ProgOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Curry Curry.Module.FlatCurry.C_Visibility where
  strEq Curry.Module.FlatCurry.C_Public Curry.Module.FlatCurry.C_Public st = Curry.Module.Prelude.strEqSuccess
  strEq Curry.Module.FlatCurry.C_Private Curry.Module.FlatCurry.C_Private st = Curry.Module.Prelude.strEqSuccess
  strEq _ x0 _ = Curry.Module.Prelude.strEqFail(Curry.Module.Prelude.typeName(x0))

  eq Curry.Module.FlatCurry.C_Public Curry.Module.FlatCurry.C_Public st = Curry.Module.Prelude.C_True
  eq Curry.Module.FlatCurry.C_Private Curry.Module.FlatCurry.C_Private st = Curry.Module.Prelude.C_True
  eq _ _ _ = Curry.Module.Prelude.C_False

  propagate f Curry.Module.FlatCurry.C_Public st = Curry.Module.FlatCurry.C_Public
  propagate f Curry.Module.FlatCurry.C_Private st = Curry.Module.FlatCurry.C_Private

  foldCurry f c Curry.Module.FlatCurry.C_Public st = c
  foldCurry f c Curry.Module.FlatCurry.C_Private st = c

  typeName _ = "Visibility"

  showQ _ Curry.Module.FlatCurry.C_Public = Prelude.showString("FlatCurry.Public")
  showQ _ Curry.Module.FlatCurry.C_Private = Prelude.showString("FlatCurry.Private")
  showQ _ (Curry.Module.FlatCurry.C_VisibilityOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Curry Curry.Module.FlatCurry.C_TypeDecl where
  strEq (Curry.Module.FlatCurry.C_Type x1 x2 x3 x4) (Curry.Module.FlatCurry.C_Type y1 y2 y3 y4) st = Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x1)(y1)(st))(Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x2)(y2)(st))(Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x3)(y3)(st))(Curry.Module.Prelude.genStrEq(x4)(y4)(st))(st))(st))(st)
  strEq (Curry.Module.FlatCurry.C_TypeSyn x1 x2 x3 x4) (Curry.Module.FlatCurry.C_TypeSyn y1 y2 y3 y4) st = Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x1)(y1)(st))(Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x2)(y2)(st))(Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x3)(y3)(st))(Curry.Module.Prelude.genStrEq(x4)(y4)(st))(st))(st))(st)
  strEq _ x0 _ = Curry.Module.Prelude.strEqFail(Curry.Module.Prelude.typeName(x0))

  eq (Curry.Module.FlatCurry.C_Type x1 x2 x3 x4) (Curry.Module.FlatCurry.C_Type y1 y2 y3 y4) st = Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x1)(y1)(st))(Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x2)(y2)(st))(Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x3)(y3)(st))(Curry.Module.Prelude.genEq(x4)(y4)(st))(st))(st))(st)
  eq (Curry.Module.FlatCurry.C_TypeSyn x1 x2 x3 x4) (Curry.Module.FlatCurry.C_TypeSyn y1 y2 y3 y4) st = Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x1)(y1)(st))(Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x2)(y2)(st))(Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x3)(y3)(st))(Curry.Module.Prelude.genEq(x4)(y4)(st))(st))(st))(st)
  eq _ _ _ = Curry.Module.Prelude.C_False

  propagate f (Curry.Module.FlatCurry.C_Type x1 x2 x3 x4) st = Curry.Module.FlatCurry.C_Type(f((0::Int))(x1)(st))(f((1::Int))(x2)(st))(f((2::Int))(x3)(st))(f((3::Int))(x4)(st))
  propagate f (Curry.Module.FlatCurry.C_TypeSyn x1 x2 x3 x4) st = Curry.Module.FlatCurry.C_TypeSyn(f((0::Int))(x1)(st))(f((1::Int))(x2)(st))(f((2::Int))(x3)(st))(f((3::Int))(x4)(st))

  foldCurry f c (Curry.Module.FlatCurry.C_Type x1 x2 x3 x4) st = f(x1)(f(x2)(f(x3)(f(x4)(c)(st))(st))(st))(st)
  foldCurry f c (Curry.Module.FlatCurry.C_TypeSyn x1 x2 x3 x4) st = f(x1)(f(x2)(f(x3)(f(x4)(c)(st))(st))(st))(st)

  typeName _ = "TypeDecl"

  showQ d (Curry.Module.FlatCurry.C_Type x1 x2 x3 x4) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Type "))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x2))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x3))((Prelude..)(Prelude.showChar(' '))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x4))))))))


  showQ d (Curry.Module.FlatCurry.C_TypeSyn x1 x2 x3 x4) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.TypeSyn "))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x2))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x3))((Prelude..)(Prelude.showChar(' '))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x4))))))))


  showQ _ (Curry.Module.FlatCurry.C_TypeDeclOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Curry Curry.Module.FlatCurry.C_ConsDecl where
  strEq (Curry.Module.FlatCurry.C_Cons x1 x2 x3 x4) (Curry.Module.FlatCurry.C_Cons y1 y2 y3 y4) st = Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x1)(y1)(st))(Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x2)(y2)(st))(Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x3)(y3)(st))(Curry.Module.Prelude.genStrEq(x4)(y4)(st))(st))(st))(st)
  strEq _ x0 _ = Curry.Module.Prelude.strEqFail(Curry.Module.Prelude.typeName(x0))

  eq (Curry.Module.FlatCurry.C_Cons x1 x2 x3 x4) (Curry.Module.FlatCurry.C_Cons y1 y2 y3 y4) st = Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x1)(y1)(st))(Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x2)(y2)(st))(Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x3)(y3)(st))(Curry.Module.Prelude.genEq(x4)(y4)(st))(st))(st))(st)
  eq _ _ _ = Curry.Module.Prelude.C_False

  propagate f (Curry.Module.FlatCurry.C_Cons x1 x2 x3 x4) st = Curry.Module.FlatCurry.C_Cons(f((0::Int))(x1)(st))(f((1::Int))(x2)(st))(f((2::Int))(x3)(st))(f((3::Int))(x4)(st))

  foldCurry f c (Curry.Module.FlatCurry.C_Cons x1 x2 x3 x4) st = f(x1)(f(x2)(f(x3)(f(x4)(c)(st))(st))(st))(st)

  typeName _ = "ConsDecl"

  showQ d (Curry.Module.FlatCurry.C_Cons x1 x2 x3 x4) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Cons "))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x2))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x3))((Prelude..)(Prelude.showChar(' '))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x4))))))))


  showQ _ (Curry.Module.FlatCurry.C_ConsDeclOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Curry Curry.Module.FlatCurry.C_TypeExpr where
  strEq (Curry.Module.FlatCurry.C_TVar x1) (Curry.Module.FlatCurry.C_TVar y1) st = Curry.Module.Prelude.genStrEq(x1)(y1)(st)
  strEq (Curry.Module.FlatCurry.C_FuncType x1 x2) (Curry.Module.FlatCurry.C_FuncType y1 y2) st = Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x1)(y1)(st))(Curry.Module.Prelude.genStrEq(x2)(y2)(st))(st)
  strEq (Curry.Module.FlatCurry.C_TCons x1 x2) (Curry.Module.FlatCurry.C_TCons y1 y2) st = Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x1)(y1)(st))(Curry.Module.Prelude.genStrEq(x2)(y2)(st))(st)
  strEq _ x0 _ = Curry.Module.Prelude.strEqFail(Curry.Module.Prelude.typeName(x0))

  eq (Curry.Module.FlatCurry.C_TVar x1) (Curry.Module.FlatCurry.C_TVar y1) st = Curry.Module.Prelude.genEq(x1)(y1)(st)
  eq (Curry.Module.FlatCurry.C_FuncType x1 x2) (Curry.Module.FlatCurry.C_FuncType y1 y2) st = Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x1)(y1)(st))(Curry.Module.Prelude.genEq(x2)(y2)(st))(st)
  eq (Curry.Module.FlatCurry.C_TCons x1 x2) (Curry.Module.FlatCurry.C_TCons y1 y2) st = Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x1)(y1)(st))(Curry.Module.Prelude.genEq(x2)(y2)(st))(st)
  eq _ _ _ = Curry.Module.Prelude.C_False

  propagate f (Curry.Module.FlatCurry.C_TVar x1) st = Curry.Module.FlatCurry.C_TVar(f((0::Int))(x1)(st))
  propagate f (Curry.Module.FlatCurry.C_FuncType x1 x2) st = Curry.Module.FlatCurry.C_FuncType(f((0::Int))(x1)(st))(f((1::Int))(x2)(st))
  propagate f (Curry.Module.FlatCurry.C_TCons x1 x2) st = Curry.Module.FlatCurry.C_TCons(f((0::Int))(x1)(st))(f((1::Int))(x2)(st))

  foldCurry f c (Curry.Module.FlatCurry.C_TVar x1) st = f(x1)(c)(st)
  foldCurry f c (Curry.Module.FlatCurry.C_FuncType x1 x2) st = f(x1)(f(x2)(c)(st))(st)
  foldCurry f c (Curry.Module.FlatCurry.C_TCons x1 x2) st = f(x1)(f(x2)(c)(st))(st)

  typeName _ = "TypeExpr"

  showQ d (Curry.Module.FlatCurry.C_TVar x1) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.TVar "))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))


  showQ d (Curry.Module.FlatCurry.C_FuncType x1 x2) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.FuncType "))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x2))))


  showQ d (Curry.Module.FlatCurry.C_TCons x1 x2) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.TCons "))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x2))))


  showQ _ (Curry.Module.FlatCurry.C_TypeExprOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Curry Curry.Module.FlatCurry.C_OpDecl where
  strEq (Curry.Module.FlatCurry.C_Op x1 x2 x3) (Curry.Module.FlatCurry.C_Op y1 y2 y3) st = Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x1)(y1)(st))(Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x2)(y2)(st))(Curry.Module.Prelude.genStrEq(x3)(y3)(st))(st))(st)
  strEq _ x0 _ = Curry.Module.Prelude.strEqFail(Curry.Module.Prelude.typeName(x0))

  eq (Curry.Module.FlatCurry.C_Op x1 x2 x3) (Curry.Module.FlatCurry.C_Op y1 y2 y3) st = Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x1)(y1)(st))(Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x2)(y2)(st))(Curry.Module.Prelude.genEq(x3)(y3)(st))(st))(st)
  eq _ _ _ = Curry.Module.Prelude.C_False

  propagate f (Curry.Module.FlatCurry.C_Op x1 x2 x3) st = Curry.Module.FlatCurry.C_Op(f((0::Int))(x1)(st))(f((1::Int))(x2)(st))(f((2::Int))(x3)(st))

  foldCurry f c (Curry.Module.FlatCurry.C_Op x1 x2 x3) st = f(x1)(f(x2)(f(x3)(c)(st))(st))(st)

  typeName _ = "OpDecl"

  showQ d (Curry.Module.FlatCurry.C_Op x1 x2 x3) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Op "))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x2))((Prelude..)(Prelude.showChar(' '))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x3))))))


  showQ _ (Curry.Module.FlatCurry.C_OpDeclOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Curry Curry.Module.FlatCurry.C_Fixity where
  strEq Curry.Module.FlatCurry.C_InfixOp Curry.Module.FlatCurry.C_InfixOp st = Curry.Module.Prelude.strEqSuccess
  strEq Curry.Module.FlatCurry.C_InfixlOp Curry.Module.FlatCurry.C_InfixlOp st = Curry.Module.Prelude.strEqSuccess
  strEq Curry.Module.FlatCurry.C_InfixrOp Curry.Module.FlatCurry.C_InfixrOp st = Curry.Module.Prelude.strEqSuccess
  strEq _ x0 _ = Curry.Module.Prelude.strEqFail(Curry.Module.Prelude.typeName(x0))

  eq Curry.Module.FlatCurry.C_InfixOp Curry.Module.FlatCurry.C_InfixOp st = Curry.Module.Prelude.C_True
  eq Curry.Module.FlatCurry.C_InfixlOp Curry.Module.FlatCurry.C_InfixlOp st = Curry.Module.Prelude.C_True
  eq Curry.Module.FlatCurry.C_InfixrOp Curry.Module.FlatCurry.C_InfixrOp st = Curry.Module.Prelude.C_True
  eq _ _ _ = Curry.Module.Prelude.C_False

  propagate f Curry.Module.FlatCurry.C_InfixOp st = Curry.Module.FlatCurry.C_InfixOp
  propagate f Curry.Module.FlatCurry.C_InfixlOp st = Curry.Module.FlatCurry.C_InfixlOp
  propagate f Curry.Module.FlatCurry.C_InfixrOp st = Curry.Module.FlatCurry.C_InfixrOp

  foldCurry f c Curry.Module.FlatCurry.C_InfixOp st = c
  foldCurry f c Curry.Module.FlatCurry.C_InfixlOp st = c
  foldCurry f c Curry.Module.FlatCurry.C_InfixrOp st = c

  typeName _ = "Fixity"

  showQ _ Curry.Module.FlatCurry.C_InfixOp = Prelude.showString("FlatCurry.InfixOp")
  showQ _ Curry.Module.FlatCurry.C_InfixlOp = Prelude.showString("FlatCurry.InfixlOp")
  showQ _ Curry.Module.FlatCurry.C_InfixrOp = Prelude.showString("FlatCurry.InfixrOp")
  showQ _ (Curry.Module.FlatCurry.C_FixityOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Curry Curry.Module.FlatCurry.C_FuncDecl where
  strEq (Curry.Module.FlatCurry.C_Func x1 x2 x3 x4 x5) (Curry.Module.FlatCurry.C_Func y1 y2 y3 y4 y5) st = Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x1)(y1)(st))(Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x2)(y2)(st))(Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x3)(y3)(st))(Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x4)(y4)(st))(Curry.Module.Prelude.genStrEq(x5)(y5)(st))(st))(st))(st))(st)
  strEq _ x0 _ = Curry.Module.Prelude.strEqFail(Curry.Module.Prelude.typeName(x0))

  eq (Curry.Module.FlatCurry.C_Func x1 x2 x3 x4 x5) (Curry.Module.FlatCurry.C_Func y1 y2 y3 y4 y5) st = Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x1)(y1)(st))(Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x2)(y2)(st))(Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x3)(y3)(st))(Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x4)(y4)(st))(Curry.Module.Prelude.genEq(x5)(y5)(st))(st))(st))(st))(st)
  eq _ _ _ = Curry.Module.Prelude.C_False

  propagate f (Curry.Module.FlatCurry.C_Func x1 x2 x3 x4 x5) st = Curry.Module.FlatCurry.C_Func(f((0::Int))(x1)(st))(f((1::Int))(x2)(st))(f((2::Int))(x3)(st))(f((3::Int))(x4)(st))(f((4::Int))(x5)(st))

  foldCurry f c (Curry.Module.FlatCurry.C_Func x1 x2 x3 x4 x5) st = f(x1)(f(x2)(f(x3)(f(x4)(f(x5)(c)(st))(st))(st))(st))(st)

  typeName _ = "FuncDecl"

  showQ d (Curry.Module.FlatCurry.C_Func x1 x2 x3 x4 x5) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Func "))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x2))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x3))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x4))((Prelude..)(Prelude.showChar(' '))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x5))))))))))


  showQ _ (Curry.Module.FlatCurry.C_FuncDeclOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Curry Curry.Module.FlatCurry.C_Rule where
  strEq (Curry.Module.FlatCurry.C_Rule x1 x2) (Curry.Module.FlatCurry.C_Rule y1 y2) st = Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x1)(y1)(st))(Curry.Module.Prelude.genStrEq(x2)(y2)(st))(st)
  strEq (Curry.Module.FlatCurry.C_External x1) (Curry.Module.FlatCurry.C_External y1) st = Curry.Module.Prelude.genStrEq(x1)(y1)(st)
  strEq _ x0 _ = Curry.Module.Prelude.strEqFail(Curry.Module.Prelude.typeName(x0))

  eq (Curry.Module.FlatCurry.C_Rule x1 x2) (Curry.Module.FlatCurry.C_Rule y1 y2) st = Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x1)(y1)(st))(Curry.Module.Prelude.genEq(x2)(y2)(st))(st)
  eq (Curry.Module.FlatCurry.C_External x1) (Curry.Module.FlatCurry.C_External y1) st = Curry.Module.Prelude.genEq(x1)(y1)(st)
  eq _ _ _ = Curry.Module.Prelude.C_False

  propagate f (Curry.Module.FlatCurry.C_Rule x1 x2) st = Curry.Module.FlatCurry.C_Rule(f((0::Int))(x1)(st))(f((1::Int))(x2)(st))
  propagate f (Curry.Module.FlatCurry.C_External x1) st = Curry.Module.FlatCurry.C_External(f((0::Int))(x1)(st))

  foldCurry f c (Curry.Module.FlatCurry.C_Rule x1 x2) st = f(x1)(f(x2)(c)(st))(st)
  foldCurry f c (Curry.Module.FlatCurry.C_External x1) st = f(x1)(c)(st)

  typeName _ = "Rule"

  showQ d (Curry.Module.FlatCurry.C_Rule x1 x2) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Rule "))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x2))))


  showQ d (Curry.Module.FlatCurry.C_External x1) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.External "))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))


  showQ _ (Curry.Module.FlatCurry.C_RuleOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Curry Curry.Module.FlatCurry.C_CaseType where
  strEq Curry.Module.FlatCurry.C_Rigid Curry.Module.FlatCurry.C_Rigid st = Curry.Module.Prelude.strEqSuccess
  strEq Curry.Module.FlatCurry.C_Flex Curry.Module.FlatCurry.C_Flex st = Curry.Module.Prelude.strEqSuccess
  strEq _ x0 _ = Curry.Module.Prelude.strEqFail(Curry.Module.Prelude.typeName(x0))

  eq Curry.Module.FlatCurry.C_Rigid Curry.Module.FlatCurry.C_Rigid st = Curry.Module.Prelude.C_True
  eq Curry.Module.FlatCurry.C_Flex Curry.Module.FlatCurry.C_Flex st = Curry.Module.Prelude.C_True
  eq _ _ _ = Curry.Module.Prelude.C_False

  propagate f Curry.Module.FlatCurry.C_Rigid st = Curry.Module.FlatCurry.C_Rigid
  propagate f Curry.Module.FlatCurry.C_Flex st = Curry.Module.FlatCurry.C_Flex

  foldCurry f c Curry.Module.FlatCurry.C_Rigid st = c
  foldCurry f c Curry.Module.FlatCurry.C_Flex st = c

  typeName _ = "CaseType"

  showQ _ Curry.Module.FlatCurry.C_Rigid = Prelude.showString("FlatCurry.Rigid")
  showQ _ Curry.Module.FlatCurry.C_Flex = Prelude.showString("FlatCurry.Flex")
  showQ _ (Curry.Module.FlatCurry.C_CaseTypeOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Curry Curry.Module.FlatCurry.C_CombType where
  strEq Curry.Module.FlatCurry.C_FuncCall Curry.Module.FlatCurry.C_FuncCall st = Curry.Module.Prelude.strEqSuccess
  strEq Curry.Module.FlatCurry.C_ConsCall Curry.Module.FlatCurry.C_ConsCall st = Curry.Module.Prelude.strEqSuccess
  strEq (Curry.Module.FlatCurry.C_FuncPartCall x1) (Curry.Module.FlatCurry.C_FuncPartCall y1) st = Curry.Module.Prelude.genStrEq(x1)(y1)(st)
  strEq (Curry.Module.FlatCurry.C_ConsPartCall x1) (Curry.Module.FlatCurry.C_ConsPartCall y1) st = Curry.Module.Prelude.genStrEq(x1)(y1)(st)
  strEq _ x0 _ = Curry.Module.Prelude.strEqFail(Curry.Module.Prelude.typeName(x0))

  eq Curry.Module.FlatCurry.C_FuncCall Curry.Module.FlatCurry.C_FuncCall st = Curry.Module.Prelude.C_True
  eq Curry.Module.FlatCurry.C_ConsCall Curry.Module.FlatCurry.C_ConsCall st = Curry.Module.Prelude.C_True
  eq (Curry.Module.FlatCurry.C_FuncPartCall x1) (Curry.Module.FlatCurry.C_FuncPartCall y1) st = Curry.Module.Prelude.genEq(x1)(y1)(st)
  eq (Curry.Module.FlatCurry.C_ConsPartCall x1) (Curry.Module.FlatCurry.C_ConsPartCall y1) st = Curry.Module.Prelude.genEq(x1)(y1)(st)
  eq _ _ _ = Curry.Module.Prelude.C_False

  propagate f Curry.Module.FlatCurry.C_FuncCall st = Curry.Module.FlatCurry.C_FuncCall
  propagate f Curry.Module.FlatCurry.C_ConsCall st = Curry.Module.FlatCurry.C_ConsCall
  propagate f (Curry.Module.FlatCurry.C_FuncPartCall x1) st = Curry.Module.FlatCurry.C_FuncPartCall(f((0::Int))(x1)(st))
  propagate f (Curry.Module.FlatCurry.C_ConsPartCall x1) st = Curry.Module.FlatCurry.C_ConsPartCall(f((0::Int))(x1)(st))

  foldCurry f c Curry.Module.FlatCurry.C_FuncCall st = c
  foldCurry f c Curry.Module.FlatCurry.C_ConsCall st = c
  foldCurry f c (Curry.Module.FlatCurry.C_FuncPartCall x1) st = f(x1)(c)(st)
  foldCurry f c (Curry.Module.FlatCurry.C_ConsPartCall x1) st = f(x1)(c)(st)

  typeName _ = "CombType"

  showQ _ Curry.Module.FlatCurry.C_FuncCall = Prelude.showString("FlatCurry.FuncCall")
  showQ _ Curry.Module.FlatCurry.C_ConsCall = Prelude.showString("FlatCurry.ConsCall")
  showQ d (Curry.Module.FlatCurry.C_FuncPartCall x1) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.FuncPartCall "))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))


  showQ d (Curry.Module.FlatCurry.C_ConsPartCall x1) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.ConsPartCall "))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))


  showQ _ (Curry.Module.FlatCurry.C_CombTypeOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Curry Curry.Module.FlatCurry.C_Expr where
  strEq (Curry.Module.FlatCurry.C_Var x1) (Curry.Module.FlatCurry.C_Var y1) st = Curry.Module.Prelude.genStrEq(x1)(y1)(st)
  strEq (Curry.Module.FlatCurry.C_Lit x1) (Curry.Module.FlatCurry.C_Lit y1) st = Curry.Module.Prelude.genStrEq(x1)(y1)(st)
  strEq (Curry.Module.FlatCurry.C_Comb x1 x2 x3) (Curry.Module.FlatCurry.C_Comb y1 y2 y3) st = Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x1)(y1)(st))(Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x2)(y2)(st))(Curry.Module.Prelude.genStrEq(x3)(y3)(st))(st))(st)
  strEq (Curry.Module.FlatCurry.C_Let x1 x2) (Curry.Module.FlatCurry.C_Let y1 y2) st = Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x1)(y1)(st))(Curry.Module.Prelude.genStrEq(x2)(y2)(st))(st)
  strEq (Curry.Module.FlatCurry.C_Free x1 x2) (Curry.Module.FlatCurry.C_Free y1 y2) st = Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x1)(y1)(st))(Curry.Module.Prelude.genStrEq(x2)(y2)(st))(st)
  strEq (Curry.Module.FlatCurry.C_Or x1 x2) (Curry.Module.FlatCurry.C_Or y1 y2) st = Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x1)(y1)(st))(Curry.Module.Prelude.genStrEq(x2)(y2)(st))(st)
  strEq (Curry.Module.FlatCurry.C_Case x1 x2 x3) (Curry.Module.FlatCurry.C_Case y1 y2 y3) st = Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x1)(y1)(st))(Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x2)(y2)(st))(Curry.Module.Prelude.genStrEq(x3)(y3)(st))(st))(st)
  strEq _ x0 _ = Curry.Module.Prelude.strEqFail(Curry.Module.Prelude.typeName(x0))

  eq (Curry.Module.FlatCurry.C_Var x1) (Curry.Module.FlatCurry.C_Var y1) st = Curry.Module.Prelude.genEq(x1)(y1)(st)
  eq (Curry.Module.FlatCurry.C_Lit x1) (Curry.Module.FlatCurry.C_Lit y1) st = Curry.Module.Prelude.genEq(x1)(y1)(st)
  eq (Curry.Module.FlatCurry.C_Comb x1 x2 x3) (Curry.Module.FlatCurry.C_Comb y1 y2 y3) st = Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x1)(y1)(st))(Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x2)(y2)(st))(Curry.Module.Prelude.genEq(x3)(y3)(st))(st))(st)
  eq (Curry.Module.FlatCurry.C_Let x1 x2) (Curry.Module.FlatCurry.C_Let y1 y2) st = Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x1)(y1)(st))(Curry.Module.Prelude.genEq(x2)(y2)(st))(st)
  eq (Curry.Module.FlatCurry.C_Free x1 x2) (Curry.Module.FlatCurry.C_Free y1 y2) st = Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x1)(y1)(st))(Curry.Module.Prelude.genEq(x2)(y2)(st))(st)
  eq (Curry.Module.FlatCurry.C_Or x1 x2) (Curry.Module.FlatCurry.C_Or y1 y2) st = Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x1)(y1)(st))(Curry.Module.Prelude.genEq(x2)(y2)(st))(st)
  eq (Curry.Module.FlatCurry.C_Case x1 x2 x3) (Curry.Module.FlatCurry.C_Case y1 y2 y3) st = Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x1)(y1)(st))(Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x2)(y2)(st))(Curry.Module.Prelude.genEq(x3)(y3)(st))(st))(st)
  eq _ _ _ = Curry.Module.Prelude.C_False

  propagate f (Curry.Module.FlatCurry.C_Var x1) st = Curry.Module.FlatCurry.C_Var(f((0::Int))(x1)(st))
  propagate f (Curry.Module.FlatCurry.C_Lit x1) st = Curry.Module.FlatCurry.C_Lit(f((0::Int))(x1)(st))
  propagate f (Curry.Module.FlatCurry.C_Comb x1 x2 x3) st = Curry.Module.FlatCurry.C_Comb(f((0::Int))(x1)(st))(f((1::Int))(x2)(st))(f((2::Int))(x3)(st))
  propagate f (Curry.Module.FlatCurry.C_Let x1 x2) st = Curry.Module.FlatCurry.C_Let(f((0::Int))(x1)(st))(f((1::Int))(x2)(st))
  propagate f (Curry.Module.FlatCurry.C_Free x1 x2) st = Curry.Module.FlatCurry.C_Free(f((0::Int))(x1)(st))(f((1::Int))(x2)(st))
  propagate f (Curry.Module.FlatCurry.C_Or x1 x2) st = Curry.Module.FlatCurry.C_Or(f((0::Int))(x1)(st))(f((1::Int))(x2)(st))
  propagate f (Curry.Module.FlatCurry.C_Case x1 x2 x3) st = Curry.Module.FlatCurry.C_Case(f((0::Int))(x1)(st))(f((1::Int))(x2)(st))(f((2::Int))(x3)(st))

  foldCurry f c (Curry.Module.FlatCurry.C_Var x1) st = f(x1)(c)(st)
  foldCurry f c (Curry.Module.FlatCurry.C_Lit x1) st = f(x1)(c)(st)
  foldCurry f c (Curry.Module.FlatCurry.C_Comb x1 x2 x3) st = f(x1)(f(x2)(f(x3)(c)(st))(st))(st)
  foldCurry f c (Curry.Module.FlatCurry.C_Let x1 x2) st = f(x1)(f(x2)(c)(st))(st)
  foldCurry f c (Curry.Module.FlatCurry.C_Free x1 x2) st = f(x1)(f(x2)(c)(st))(st)
  foldCurry f c (Curry.Module.FlatCurry.C_Or x1 x2) st = f(x1)(f(x2)(c)(st))(st)
  foldCurry f c (Curry.Module.FlatCurry.C_Case x1 x2 x3) st = f(x1)(f(x2)(f(x3)(c)(st))(st))(st)

  typeName _ = "Expr"

  showQ d (Curry.Module.FlatCurry.C_Var x1) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Var "))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))


  showQ d (Curry.Module.FlatCurry.C_Lit x1) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Lit "))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))


  showQ d (Curry.Module.FlatCurry.C_Comb x1 x2 x3) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Comb "))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x2))((Prelude..)(Prelude.showChar(' '))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x3))))))


  showQ d (Curry.Module.FlatCurry.C_Let x1 x2) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Let "))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x2))))


  showQ d (Curry.Module.FlatCurry.C_Free x1 x2) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Free "))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x2))))


  showQ d (Curry.Module.FlatCurry.C_Or x1 x2) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Or "))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x2))))


  showQ d (Curry.Module.FlatCurry.C_Case x1 x2 x3) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Case "))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x2))((Prelude..)(Prelude.showChar(' '))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x3))))))


  showQ _ (Curry.Module.FlatCurry.C_ExprOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Curry Curry.Module.FlatCurry.C_BranchExpr where
  strEq (Curry.Module.FlatCurry.C_Branch x1 x2) (Curry.Module.FlatCurry.C_Branch y1 y2) st = Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x1)(y1)(st))(Curry.Module.Prelude.genStrEq(x2)(y2)(st))(st)
  strEq _ x0 _ = Curry.Module.Prelude.strEqFail(Curry.Module.Prelude.typeName(x0))

  eq (Curry.Module.FlatCurry.C_Branch x1 x2) (Curry.Module.FlatCurry.C_Branch y1 y2) st = Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x1)(y1)(st))(Curry.Module.Prelude.genEq(x2)(y2)(st))(st)
  eq _ _ _ = Curry.Module.Prelude.C_False

  propagate f (Curry.Module.FlatCurry.C_Branch x1 x2) st = Curry.Module.FlatCurry.C_Branch(f((0::Int))(x1)(st))(f((1::Int))(x2)(st))

  foldCurry f c (Curry.Module.FlatCurry.C_Branch x1 x2) st = f(x1)(f(x2)(c)(st))(st)

  typeName _ = "BranchExpr"

  showQ d (Curry.Module.FlatCurry.C_Branch x1 x2) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Branch "))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x2))))


  showQ _ (Curry.Module.FlatCurry.C_BranchExprOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Curry Curry.Module.FlatCurry.C_Pattern where
  strEq (Curry.Module.FlatCurry.C_Pattern x1 x2) (Curry.Module.FlatCurry.C_Pattern y1 y2) st = Curry.Module.Prelude.concAnd(Curry.Module.Prelude.genStrEq(x1)(y1)(st))(Curry.Module.Prelude.genStrEq(x2)(y2)(st))(st)
  strEq (Curry.Module.FlatCurry.C_LPattern x1) (Curry.Module.FlatCurry.C_LPattern y1) st = Curry.Module.Prelude.genStrEq(x1)(y1)(st)
  strEq _ x0 _ = Curry.Module.Prelude.strEqFail(Curry.Module.Prelude.typeName(x0))

  eq (Curry.Module.FlatCurry.C_Pattern x1 x2) (Curry.Module.FlatCurry.C_Pattern y1 y2) st = Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.genEq(x1)(y1)(st))(Curry.Module.Prelude.genEq(x2)(y2)(st))(st)
  eq (Curry.Module.FlatCurry.C_LPattern x1) (Curry.Module.FlatCurry.C_LPattern y1) st = Curry.Module.Prelude.genEq(x1)(y1)(st)
  eq _ _ _ = Curry.Module.Prelude.C_False

  propagate f (Curry.Module.FlatCurry.C_Pattern x1 x2) st = Curry.Module.FlatCurry.C_Pattern(f((0::Int))(x1)(st))(f((1::Int))(x2)(st))
  propagate f (Curry.Module.FlatCurry.C_LPattern x1) st = Curry.Module.FlatCurry.C_LPattern(f((0::Int))(x1)(st))

  foldCurry f c (Curry.Module.FlatCurry.C_Pattern x1 x2) st = f(x1)(f(x2)(c)(st))(st)
  foldCurry f c (Curry.Module.FlatCurry.C_LPattern x1) st = f(x1)(c)(st)

  typeName _ = "Pattern"

  showQ d (Curry.Module.FlatCurry.C_Pattern x1 x2) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Pattern "))((Prelude..)(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x2))))


  showQ d (Curry.Module.FlatCurry.C_LPattern x1) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.LPattern "))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))


  showQ _ (Curry.Module.FlatCurry.C_PatternOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Curry Curry.Module.FlatCurry.C_Literal where
  strEq (Curry.Module.FlatCurry.C_Intc x1) (Curry.Module.FlatCurry.C_Intc y1) st = Curry.Module.Prelude.genStrEq(x1)(y1)(st)
  strEq (Curry.Module.FlatCurry.C_Floatc x1) (Curry.Module.FlatCurry.C_Floatc y1) st = Curry.Module.Prelude.genStrEq(x1)(y1)(st)
  strEq (Curry.Module.FlatCurry.C_Charc x1) (Curry.Module.FlatCurry.C_Charc y1) st = Curry.Module.Prelude.genStrEq(x1)(y1)(st)
  strEq _ x0 _ = Curry.Module.Prelude.strEqFail(Curry.Module.Prelude.typeName(x0))

  eq (Curry.Module.FlatCurry.C_Intc x1) (Curry.Module.FlatCurry.C_Intc y1) st = Curry.Module.Prelude.genEq(x1)(y1)(st)
  eq (Curry.Module.FlatCurry.C_Floatc x1) (Curry.Module.FlatCurry.C_Floatc y1) st = Curry.Module.Prelude.genEq(x1)(y1)(st)
  eq (Curry.Module.FlatCurry.C_Charc x1) (Curry.Module.FlatCurry.C_Charc y1) st = Curry.Module.Prelude.genEq(x1)(y1)(st)
  eq _ _ _ = Curry.Module.Prelude.C_False

  propagate f (Curry.Module.FlatCurry.C_Intc x1) st = Curry.Module.FlatCurry.C_Intc(f((0::Int))(x1)(st))
  propagate f (Curry.Module.FlatCurry.C_Floatc x1) st = Curry.Module.FlatCurry.C_Floatc(f((0::Int))(x1)(st))
  propagate f (Curry.Module.FlatCurry.C_Charc x1) st = Curry.Module.FlatCurry.C_Charc(f((0::Int))(x1)(st))

  foldCurry f c (Curry.Module.FlatCurry.C_Intc x1) st = f(x1)(c)(st)
  foldCurry f c (Curry.Module.FlatCurry.C_Floatc x1) st = f(x1)(c)(st)
  foldCurry f c (Curry.Module.FlatCurry.C_Charc x1) st = f(x1)(c)(st)

  typeName _ = "Literal"

  showQ d (Curry.Module.FlatCurry.C_Intc x1) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Intc "))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))


  showQ d (Curry.Module.FlatCurry.C_Floatc x1) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Floatc "))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))


  showQ d (Curry.Module.FlatCurry.C_Charc x1) = Prelude.showParen(Prelude.True)(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FlatCurry.Charc "))(Curry.Module.Prelude.showQ(Curry.RunTimeSystem.eleven)(x1))


  showQ _ (Curry.Module.FlatCurry.C_LiteralOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Show Curry.Module.FlatCurry.C_Prog where
  showsPrec d (Curry.Module.FlatCurry.C_Prog x1 x2 x3 x4 x5) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Prog "))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x2))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x3))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x4))((Prelude..)(Prelude.showChar(' '))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x5))))))))))


  showsPrec _ (Curry.Module.FlatCurry.C_ProgOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Show Curry.Module.FlatCurry.C_Visibility where
  showsPrec _ Curry.Module.FlatCurry.C_Public = Prelude.showString("Public")
  showsPrec _ Curry.Module.FlatCurry.C_Private = Prelude.showString("Private")
  showsPrec _ (Curry.Module.FlatCurry.C_VisibilityOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Show Curry.Module.FlatCurry.C_TypeDecl where
  showsPrec d (Curry.Module.FlatCurry.C_Type x1 x2 x3 x4) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Type "))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x2))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x3))((Prelude..)(Prelude.showChar(' '))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x4))))))))


  showsPrec d (Curry.Module.FlatCurry.C_TypeSyn x1 x2 x3 x4) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("TypeSyn "))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x2))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x3))((Prelude..)(Prelude.showChar(' '))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x4))))))))


  showsPrec _ (Curry.Module.FlatCurry.C_TypeDeclOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Show Curry.Module.FlatCurry.C_ConsDecl where
  showsPrec d (Curry.Module.FlatCurry.C_Cons x1 x2 x3 x4) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Cons "))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x2))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x3))((Prelude..)(Prelude.showChar(' '))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x4))))))))


  showsPrec _ (Curry.Module.FlatCurry.C_ConsDeclOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Show Curry.Module.FlatCurry.C_TypeExpr where
  showsPrec d (Curry.Module.FlatCurry.C_TVar x1) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("TVar "))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))


  showsPrec d (Curry.Module.FlatCurry.C_FuncType x1 x2) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FuncType "))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x2))))


  showsPrec d (Curry.Module.FlatCurry.C_TCons x1 x2) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("TCons "))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x2))))


  showsPrec _ (Curry.Module.FlatCurry.C_TypeExprOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Show Curry.Module.FlatCurry.C_OpDecl where
  showsPrec d (Curry.Module.FlatCurry.C_Op x1 x2 x3) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Op "))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x2))((Prelude..)(Prelude.showChar(' '))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x3))))))


  showsPrec _ (Curry.Module.FlatCurry.C_OpDeclOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Show Curry.Module.FlatCurry.C_Fixity where
  showsPrec _ Curry.Module.FlatCurry.C_InfixOp = Prelude.showString("InfixOp")
  showsPrec _ Curry.Module.FlatCurry.C_InfixlOp = Prelude.showString("InfixlOp")
  showsPrec _ Curry.Module.FlatCurry.C_InfixrOp = Prelude.showString("InfixrOp")
  showsPrec _ (Curry.Module.FlatCurry.C_FixityOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Show Curry.Module.FlatCurry.C_FuncDecl where
  showsPrec d (Curry.Module.FlatCurry.C_Func x1 x2 x3 x4 x5) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Func "))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x2))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x3))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x4))((Prelude..)(Prelude.showChar(' '))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x5))))))))))


  showsPrec _ (Curry.Module.FlatCurry.C_FuncDeclOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Show Curry.Module.FlatCurry.C_Rule where
  showsPrec d (Curry.Module.FlatCurry.C_Rule x1 x2) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Rule "))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x2))))


  showsPrec d (Curry.Module.FlatCurry.C_External x1) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("External "))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))


  showsPrec _ (Curry.Module.FlatCurry.C_RuleOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Show Curry.Module.FlatCurry.C_CaseType where
  showsPrec _ Curry.Module.FlatCurry.C_Rigid = Prelude.showString("Rigid")
  showsPrec _ Curry.Module.FlatCurry.C_Flex = Prelude.showString("Flex")
  showsPrec _ (Curry.Module.FlatCurry.C_CaseTypeOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Show Curry.Module.FlatCurry.C_CombType where
  showsPrec _ Curry.Module.FlatCurry.C_FuncCall = Prelude.showString("FuncCall")
  showsPrec _ Curry.Module.FlatCurry.C_ConsCall = Prelude.showString("ConsCall")
  showsPrec d (Curry.Module.FlatCurry.C_FuncPartCall x1) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("FuncPartCall "))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))


  showsPrec d (Curry.Module.FlatCurry.C_ConsPartCall x1) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("ConsPartCall "))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))


  showsPrec _ (Curry.Module.FlatCurry.C_CombTypeOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Show Curry.Module.FlatCurry.C_Expr where
  showsPrec d (Curry.Module.FlatCurry.C_Var x1) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Var "))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))


  showsPrec d (Curry.Module.FlatCurry.C_Lit x1) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Lit "))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))


  showsPrec d (Curry.Module.FlatCurry.C_Comb x1 x2 x3) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Comb "))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x2))((Prelude..)(Prelude.showChar(' '))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x3))))))


  showsPrec d (Curry.Module.FlatCurry.C_Let x1 x2) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Let "))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x2))))


  showsPrec d (Curry.Module.FlatCurry.C_Free x1 x2) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Free "))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x2))))


  showsPrec d (Curry.Module.FlatCurry.C_Or x1 x2) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Or "))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x2))))


  showsPrec d (Curry.Module.FlatCurry.C_Case x1 x2 x3) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Case "))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x2))((Prelude..)(Prelude.showChar(' '))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x3))))))


  showsPrec _ (Curry.Module.FlatCurry.C_ExprOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Show Curry.Module.FlatCurry.C_BranchExpr where
  showsPrec d (Curry.Module.FlatCurry.C_Branch x1 x2) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Branch "))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x2))))


  showsPrec _ (Curry.Module.FlatCurry.C_BranchExprOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Show Curry.Module.FlatCurry.C_Pattern where
  showsPrec d (Curry.Module.FlatCurry.C_Pattern x1 x2) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Pattern "))((Prelude..)(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))((Prelude..)(Prelude.showChar(' '))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x2))))


  showsPrec d (Curry.Module.FlatCurry.C_LPattern x1) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("LPattern "))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))


  showsPrec _ (Curry.Module.FlatCurry.C_PatternOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Show Curry.Module.FlatCurry.C_Literal where
  showsPrec d (Curry.Module.FlatCurry.C_Intc x1) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Intc "))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))


  showsPrec d (Curry.Module.FlatCurry.C_Floatc x1) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Floatc "))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))


  showsPrec d (Curry.Module.FlatCurry.C_Charc x1) = Prelude.showParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(showStr)
   where
    showStr  = (Prelude..)(Prelude.showString("Charc "))(Prelude.showsPrec(Curry.RunTimeSystem.eleven)(x1))


  showsPrec _ (Curry.Module.FlatCurry.C_LiteralOr r _) = Prelude.showString((:)('_')(Prelude.show(Curry.RunTimeSystem.deref(r))))





instance Read Curry.Module.FlatCurry.C_Prog where
  readsPrec d r = Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Prog(x1)(x2)(x3)(x4)(x5))(r5) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Prog")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0), ((,) x2 r2) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r1), ((,) x3 r3) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r2), ((,) x4 r4) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r3), ((,) x5 r5) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r4)])(r)





instance Read Curry.Module.FlatCurry.C_Visibility where
  readsPrec d r = (Prelude.++)(Prelude.readParen(Prelude.False)(\ r -> [(,)(Curry.Module.FlatCurry.C_Public)(r0) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Public")(r)])(r))(Prelude.readParen(Prelude.False)(\ r -> [(,)(Curry.Module.FlatCurry.C_Private)(r0) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Private")(r)])(r))





instance Read Curry.Module.FlatCurry.C_TypeDecl where
  readsPrec d r = (Prelude.++)(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Type(x1)(x2)(x3)(x4))(r4) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Type")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0), ((,) x2 r2) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r1), ((,) x3 r3) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r2), ((,) x4 r4) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r3)])(r))(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_TypeSyn(x1)(x2)(x3)(x4))(r4) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("TypeSyn")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0), ((,) x2 r2) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r1), ((,) x3 r3) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r2), ((,) x4 r4) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r3)])(r))





instance Read Curry.Module.FlatCurry.C_ConsDecl where
  readsPrec d r = Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Cons(x1)(x2)(x3)(x4))(r4) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Cons")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0), ((,) x2 r2) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r1), ((,) x3 r3) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r2), ((,) x4 r4) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r3)])(r)





instance Read Curry.Module.FlatCurry.C_TypeExpr where
  readsPrec d r = (Prelude.++)(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_TVar(x1))(r1) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("TVar")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0)])(r))((Prelude.++)(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_FuncType(x1)(x2))(r2) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("FuncType")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0), ((,) x2 r2) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r1)])(r))(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_TCons(x1)(x2))(r2) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("TCons")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0), ((,) x2 r2) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r1)])(r)))





instance Read Curry.Module.FlatCurry.C_OpDecl where
  readsPrec d r = Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Op(x1)(x2)(x3))(r3) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Op")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0), ((,) x2 r2) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r1), ((,) x3 r3) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r2)])(r)





instance Read Curry.Module.FlatCurry.C_Fixity where
  readsPrec d r = (Prelude.++)(Prelude.readParen(Prelude.False)(\ r -> [(,)(Curry.Module.FlatCurry.C_InfixOp)(r0) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("InfixOp")(r)])(r))((Prelude.++)(Prelude.readParen(Prelude.False)(\ r -> [(,)(Curry.Module.FlatCurry.C_InfixlOp)(r0) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("InfixlOp")(r)])(r))(Prelude.readParen(Prelude.False)(\ r -> [(,)(Curry.Module.FlatCurry.C_InfixrOp)(r0) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("InfixrOp")(r)])(r)))





instance Read Curry.Module.FlatCurry.C_FuncDecl where
  readsPrec d r = Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Func(x1)(x2)(x3)(x4)(x5))(r5) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Func")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0), ((,) x2 r2) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r1), ((,) x3 r3) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r2), ((,) x4 r4) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r3), ((,) x5 r5) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r4)])(r)





instance Read Curry.Module.FlatCurry.C_Rule where
  readsPrec d r = (Prelude.++)(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Rule(x1)(x2))(r2) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Rule")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0), ((,) x2 r2) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r1)])(r))(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_External(x1))(r1) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("External")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0)])(r))





instance Read Curry.Module.FlatCurry.C_CaseType where
  readsPrec d r = (Prelude.++)(Prelude.readParen(Prelude.False)(\ r -> [(,)(Curry.Module.FlatCurry.C_Rigid)(r0) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Rigid")(r)])(r))(Prelude.readParen(Prelude.False)(\ r -> [(,)(Curry.Module.FlatCurry.C_Flex)(r0) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Flex")(r)])(r))





instance Read Curry.Module.FlatCurry.C_CombType where
  readsPrec d r = (Prelude.++)(Prelude.readParen(Prelude.False)(\ r -> [(,)(Curry.Module.FlatCurry.C_FuncCall)(r0) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("FuncCall")(r)])(r))((Prelude.++)(Prelude.readParen(Prelude.False)(\ r -> [(,)(Curry.Module.FlatCurry.C_ConsCall)(r0) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("ConsCall")(r)])(r))((Prelude.++)(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_FuncPartCall(x1))(r1) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("FuncPartCall")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0)])(r))(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_ConsPartCall(x1))(r1) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("ConsPartCall")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0)])(r))))





instance Read Curry.Module.FlatCurry.C_Expr where
  readsPrec d r = (Prelude.++)(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Var(x1))(r1) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Var")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0)])(r))((Prelude.++)(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Lit(x1))(r1) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Lit")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0)])(r))((Prelude.++)(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Comb(x1)(x2)(x3))(r3) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Comb")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0), ((,) x2 r2) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r1), ((,) x3 r3) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r2)])(r))((Prelude.++)(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Let(x1)(x2))(r2) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Let")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0), ((,) x2 r2) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r1)])(r))((Prelude.++)(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Free(x1)(x2))(r2) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Free")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0), ((,) x2 r2) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r1)])(r))((Prelude.++)(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Or(x1)(x2))(r2) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Or")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0), ((,) x2 r2) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r1)])(r))(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Case(x1)(x2)(x3))(r3) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Case")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0), ((,) x2 r2) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r1), ((,) x3 r3) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r2)])(r)))))))





instance Read Curry.Module.FlatCurry.C_BranchExpr where
  readsPrec d r = Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Branch(x1)(x2))(r2) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Branch")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0), ((,) x2 r2) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r1)])(r)





instance Read Curry.Module.FlatCurry.C_Pattern where
  readsPrec d r = (Prelude.++)(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Pattern(x1)(x2))(r2) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Pattern")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0), ((,) x2 r2) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r1)])(r))(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_LPattern(x1))(r1) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("LPattern")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0)])(r))





instance Read Curry.Module.FlatCurry.C_Literal where
  readsPrec d r = (Prelude.++)(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Intc(x1))(r1) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Intc")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0)])(r))((Prelude.++)(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Floatc(x1))(r1) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Floatc")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0)])(r))(Prelude.readParen((Prelude.>)(d)(Curry.RunTimeSystem.ten))(\ r -> [(,)(Curry.Module.FlatCurry.C_Charc(x1))(r1) | ((,) _ r0) <- Curry.RunTimeSystem.readQualified("FlatCurry")("Charc")(r), ((,) x1 r1) <- Prelude.readsPrec(Curry.RunTimeSystem.eleven)(r0)])(r)))





c_readFlatCurry :: (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.FlatCurry.C_Prog
c_readFlatCurry x1 st = Curry.Module.FlatCurry.c_readFlatCurryWithParseOptions(x1)(Curry.Module.Distribution.c_setQuiet(Curry.Module.Prelude.C_True)(Curry.Module.Distribution.c_defaultParams(st))(st))(st)



c_readFlatCurryWithParseOptions :: (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) -> Curry.Module.Distribution.C_FrontendParams -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.FlatCurry.C_Prog
c_readFlatCurryWithParseOptions x1 x2 st = Curry.Module.Prelude.op_62_62_61(Curry.Module.Distribution.c_lookupFileInLoadPath(Curry.Module.Prelude.op_43_43(x1)((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('.'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('c'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('u'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('r'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('r'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('y'))(Curry.Module.Prelude.List)))))))(st))(st))(Curry.Module.Prelude.pf(Curry.Module.FlatCurry.c_readFlatCurryWithParseOptions'46_'35lambda2(x2)(x1)))(st)



c_readFlatCurryWithParseOptions'46_'35lambda2 :: Curry.Module.Distribution.C_FrontendParams -> (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) -> (Curry.Module.Prelude.C_Maybe (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char)) -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.FlatCurry.C_Prog
c_readFlatCurryWithParseOptions'46_'35lambda2 x1 x2 x3 st = Curry.Module.Prelude.op_62_62_61(Curry.Module.Distribution.c_lookupFileInLoadPath(Curry.Module.Prelude.op_43_43(x2)((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('.'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('l'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('c'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('u'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('r'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('r'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('y'))(Curry.Module.Prelude.List))))))))(st))(st))(Curry.Module.Prelude.pf(Curry.Module.FlatCurry.c_readFlatCurryWithParseOptions'46_'35lambda2'46_'35lambda3(x3)(x1)(x2)))(st)



c_readFlatCurryWithParseOptions'46_'35lambda2'46_'35lambda3 :: (Curry.Module.Prelude.C_Maybe (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char)) -> Curry.Module.Distribution.C_FrontendParams -> (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) -> (Curry.Module.Prelude.C_Maybe (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char)) -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.FlatCurry.C_Prog
c_readFlatCurryWithParseOptions'46_'35lambda2'46_'35lambda3 x1 x2 x3 x4 st = Curry.Module.Prelude.op_62_62(Curry.Module.FlatCurry.c_readFlatCurryWithParseOptions'46_'35lambda2'46_'35lambda3_case_2(x1)(x2)(x3)(x4)(Curry.Module.Prelude.op_38_38(Curry.Module.Prelude.op_61_61(x1)(Curry.Module.Prelude.C_Nothing)(st))(Curry.Module.Prelude.op_61_61(x4)(Curry.Module.Prelude.C_Nothing)(st))(st))(st))(Curry.Module.Prelude.op_62_62_61(Curry.Module.Distribution.c_findFileInLoadPath(Curry.Module.Prelude.op_43_43(x3)((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('.'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('f'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('c'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('y'))(Curry.Module.Prelude.List)))))(st))(st))(Curry.Module.Prelude.pf(Curry.Module.FlatCurry.c_readFlatCurryWithParseOptions'46_'35lambda2'46_'35lambda3'46_'35lambda4))(st))(st)



c_readFlatCurryWithParseOptions'46_'35lambda2'46_'35lambda3'46_'35lambda4 :: (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.FlatCurry.C_Prog
c_readFlatCurryWithParseOptions'46_'35lambda2'46_'35lambda3'46_'35lambda4 x1 st = Curry.Module.FlatCurry.c_readFlatCurryFile(x1)(st)



c_flatCurryFileName :: (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.List Curry.Module.Prelude.C_Char
c_flatCurryFileName x1 st = Curry.Module.Distribution.c_inCurrySubdir(Curry.Module.Prelude.op_43_43(Curry.Module.Prelude.c_apply(Curry.Module.FileGoodies.c_stripSuffix(st))(x1)(st))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('.'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('f'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('c'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('y'))(Curry.Module.Prelude.List)))))(st))(st)



c_flatCurryIntName :: (Curry.Module.Prelude.List Curry.Module.Prelude.C_Char) -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.List Curry.Module.Prelude.C_Char
c_flatCurryIntName x1 st = Curry.Module.Distribution.c_inCurrySubdir(Curry.Module.Prelude.op_43_43(Curry.Module.Prelude.c_apply(Curry.Module.FileGoodies.c_stripSuffix(st))(x1)(st))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('.'))((Curry.Module.Prelude.:<)(Curry.Module.Prelude.C_Char('f'))((Curry.Module.Prelude.:<)(Curry.