anchor.diff:  ----
   
   ==== Type Literal Use Outside of Annotations
  +
   Type literals could be used in other production rules as well where this is considered more readable by future CIPs (e.g. a type test operator expr IS NUMBER).
   
   === 3.2 Syntax
  
positive.code:  * `DURATION`
   ** A temporal amount. This captures the difference in time between two instants. It only captures the amount of time between two instants, it does not capture a start time and end time. A unit capturing the start time and end time would be a _Time Interval_ and is out of scope for this proposal.
  
  Note that NULL is not a type but a value that inhabits every type.
  
  ==== Type Annotation
  To specify the type type of a term term in future changes to the Cypher grammar, this CIP proposes using the following syntax
  
  [source, ebnf]
  
negative.code: = CIP2015-06-16 - Public Type System and Type Annotations
  :numbered:
  :toc:
  :toc-placement: macro
  :source-highlighter: codemirror
  
  *Author:* Stefan Plantikow <stefan.plantikow@neotechnology.com
  *Author:* Nigel Small <nigel.small@neotechnology.com
  
  [abstract]
  .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.
  
  toc::[]
  
  == Introduction
  
  === Background and Motivation
  
  Cypher today has an undocumented internal type system. In the interest of Cypher standardization and to enable multiple
  semantically consistent implementations, it is necessary to specify and document that type system.
  
  Furthermore, in order to support currently ongoing work for allowing users to define _stored procedures_, it has become
  necessary to specify types explicitly within signatures. This will help with the following:
  
  * In any interaction with an external language, type mapping between the external language and Cypher is necessary. Any
  such type mapping must rest on a well defined type system for Cypher in order to be consistent across different
  implementations. This applies to interaction via an external language supported by the implementation, as well as
  interaction via a remote protocol.
  * To call user defined procedures from within a larger Cypher query the planner needs to know static type signatures to generate efficient plans.
  * Statically typed signatures enable implementations to detect possible errors at query compilation time.
  * Statically typed signatures also enable added support for overloading in the future.
  
  To support these goals, it is necessary to at least introduce syntax for all valid, supported public types as well as syntax for type annotation.
  
  === 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 type parameters and union types. 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
  
  The sections below list all types available at the time of acceptance of this CIP.
  
  ==== Core Types
  
  The following should available from any implementation of Cypher
  
   * `ANY`
   ** Supertype to all other types
  