anchor.diff:   ** Exact numbers without decimals, i.e. -3, 0, 4
    * `FLOAT`
    ** IEEE-754 64-bit floating point numbers
  - * `IDENTITY`
  - ** Identities are considered part of the current type system (since the +++<u>Identity type CIP</u>+++ has been accepted), even though it has not been implemented at the time of writing this CIP
    * `MAP`
    ** Maps to values of any type, i.e. { name: "Svensson" }. Note that keys are identifiers, not strings.
    ** This is also the supertype for `NODE` and `RELATIONSHIP`
  
positive.code: :numbered:
  :toc:
  :toc-placement: macro
  :source-highlighter: pygments
  
  = CIP2015-09-16
  Public Type System & Type Annotation
  
  *Authors:*
  
  Nigel Small <nigel@neotechnology.com> +
  Stefan Plantikow <stefan.plantikow@neotechnology.com>
  
  toc::[]
  
  == Abstract
  
  This CIP specifies the public part of the type system of Cypher and introduces literal syntax for writing down types as well as new syntax for type annotations. The proposed type annotation syntax does not change the Cypher grammar right now but rather is intended as a template to be used by future CIPs. This CIP also informatively discusses future syntax that might use the introduced literal type syntax.
  
  == Introduction
  === Background and Motivation
  In order to support currently ongoing work for allowing users to define _procedures_ and _functions_ that interact with Cypher, it has become necessary to specify types explicitly, especially as part of procedure and function signatures. It is thus necessary to at least introduce syntax for all valid, supported public types as well as syntax for type ascription.
  
  === Overview
  For the purposes of this CIP, a type system is a system of classifying expressions according to what kinds of values they may evaluate to during the execution of a Cypher query. It does *not *include a specification of a type inferencing and checking algorithm for Cypher queries.
  
  Cypher today has a rich type system that unifies Java implementation types into a coherent type hierarchy and an accompanying type checker that supports rich types with generics and type unions. So far it has not been possible to explicitly specify the type of an expression in a query.
  
  This CIP proposes to introduce syntax for type literals and for type annotations.
  
  == 3. Proposal
  === Types and Type Literal Syntax
  Below we list all currently supported types together with the proposed type literal syntax (in *[]*)
  
  ==== Types
  Cypher currently supports values with the following types:
  
   * `ANY`
   ** Supertype to all other types
  
negative.code: ----
  type = scalar type
       | container type
       | optional type
       ;
  
  optional type = "?", type;
  
  scalar type 	= "ANY"
                | "BOOLEAN"
                | "INTEGER"
                | "FLOAT"
                | "IDENTITY"
                | "MAP"
                | "NODE"
                | "STRING"
                | "RELATIONSHIP"
                | "PATH"
                | "NUMBER"
                | "DATETIME"
                | "LOCALDATETIME"
                | "DATE"
                | "LOCALDATE"
                | "LOCALTIME"
                | "DURATION”
                ;
  
  container type	= "LIST", "<", type, ">";
  
  type annotation = term, "::", type ;
  ----
  
  === Semantics
  