#line 53 "/home/travis/build/felix-lang/felix/src/packages/core_scalar_types.fdoc"
  pod type char = "char";
  
  #line 70 "/home/travis/build/felix-lang/felix/src/packages/core_scalar_types.fdoc"
  pod type tiny = "signed char";
  pod type short = "short";
  pod type int = "int";
  pod type long = "long";
  pod type vlong = "long long";
  pod type utiny = "unsigned char";
  pod type ushort = "unsigned short";
  pod type uint = "unsigned int";
  pod type ulong = "unsigned long";
  pod type uvlong = "unsigned long long";
  
  pod type intmax = "intmax_t" requires C99_headers::stdint_h;
  pod type uintmax = "uintmax_t" requires C99_headers::stdint_h;
  pod type size = "size_t" requires C89_headers::stddef_h;
  pod type ssize = "ssize_t" requires C89_headers::stddef_h;
  
  
  #line 95 "/home/travis/build/felix-lang/felix/src/packages/core_scalar_types.fdoc"
  pod type int8 = "int8_t" requires C99_headers::stdint_h;
  pod type int16 = "int16_t" requires C99_headers::stdint_h;
  pod type int32 = "int32_t" requires C99_headers::stdint_h;
  pod type int64 = "int64_t" requires C99_headers::stdint_h;
  pod type uint8 = "uint8_t" requires C99_headers::stdint_h;
  pod type uint16 = "uint16_t" requires C99_headers::stdint_h;
  pod type uint32 = "uint32_t" requires C99_headers::stdint_h;
  pod type uint64 = "uint64_t" requires C99_headers::stdint_h;
  
  #line 117 "/home/travis/build/felix-lang/felix/src/packages/core_scalar_types.fdoc"
  pod type byte = "unsigned char";
  type caddress = "void *";
  _gc_pointer type address = "void *";
  
  pod type ptrdiff = "ptrdiff_t" requires C89_headers::stddef_h;
  
  pod type intptr = "intptr_t" requires C99_headers::stdint_h;
  pod type uintptr = "uintptr_t" requires C99_headers::stdint_h;
  #line 397 "/home/travis/build/felix-lang/felix/src/packages/core_scalar_types.fdoc"
  pod type float = "float";
  pod type double = "double";
  pod type ldouble = "long double";
  pod type fcomplex = "::std::complex<float>" requires Cxx_headers::complex;
  pod type dcomplex = "::std::complex<double>" requires Cxx_headers::complex;
  pod type lcomplex = "::std::complex<long double>" requires Cxx_headers::complex;
  
  
  #line 477 "/home/travis/build/felix-lang/felix/src/packages/core_scalar_types.fdoc"
  Types associated with raw address calculations.
  typedef addressing = typesetof (
    byte,
    address,
    caddress
  );
  
  Character types.
  typedef chars = typesetof (char);
  
  #line 489 "/home/travis/build/felix-lang/felix/src/packages/core_scalar_types.fdoc"
  "natural" sized signed integer types.
  These correspond to C/C++ core types.
  typedef fast_sints = typesetof (tiny, short, int, long, vlong);
  
  Exact sized signed integer types.
  In C these are typedefs.
  In Felix they're distinct types.
  typedef exact_sints = typesetof(int8,int16,int32,int64);
  
  "natural" sized unsigned integer types.
  These correspond to C/C++ core types.
  typedef fast_uints = typesetof (utiny, ushort, uint, ulong,uvlong);
  
  Exact sized unsigned integer types.
  In C these are typedefs.
  In Felix they're distinct types.
  typedef exact_uints = typesetof (uint8,uint16,uint32,uint64);
  
  Weirdo signed integers types corresponding to
  typedefs in C.
  typedef weird_sints = typesetof (ptrdiff, ssize, intmax, intptr);
  
  Weirdo unsigned integers types corresponding to
  typedefs in C.
  typedef weird_uints = typesetof (size, uintmax, uintptr);
  
  All the signed integers.
  typedef sints = fast_sints \(\cup\) exact_sints \(\cup\) weird_sints;
  
  All the usigned integers.
  typedef uints = fast_uints \(\cup\) exact_uints \(\cup\) weird_uints;
  
  All the fast integers.
  typedef fast_ints = fast_sints \(\cup\) fast_uints;
  
  All the exact integers.
  typedef exact_ints = exact_sints \(\cup\) exact_uints;
  
  All the integers.
  typedef ints = sints \(\cup\) uints;
  
  #line 532 "/home/travis/build/felix-lang/felix/src/packages/core_scalar_types.fdoc"
  All the core floating point types.
  typedef floats = typesetof (float, double, ldouble);
  
  All the core approximations to real types.
  typedef reals = ints \(\cup\) floats;
  
  All the core approximations to complex types.
  typedef complexes = typesetof (fcomplex,dcomplex,lcomplex);
  
  All the core approximations to numbers.
  typedef numbers = reals \(\cup\) complexes;
  #line 547 "/home/travis/build/felix-lang/felix/src/packages/core_scalar_types.fdoc"
  All the basic scalar types.
  typedef basic_types = bool \(\cup\) numbers \(\cup\) chars \(\cup\) addressing;
  
  // we define this now, we will open it later...
  instance [t in basic_types] Eq[t] {
    fun == : t * t -> bool = "$1==$2";
  }
  
  // we open this now even though we haven't developed
  // the instances yet....
  open[T in basic_types] Show[T];