/**
 * Lists are represented by means of the constructors Nil and Cons. They can
 * either be written as terms with these constructors, e.g. Cons(0, Cons(1, Nil)),
 * or using concrete list syntax: [0, 1]
 *
 * Stratego pretty-printers and the Stratego Shell will always prefer to display
 * lists using the concrete syntax.
 */
module collection/list/cons
signature
  sorts List(a)
  constructors
  
    /**
     * Empty list.
     */
    Nil  : List(a)
    
    /**
     * Element of a list.
     */
    Cons : a * List(a) -> List(a)
    
    /**
     * Concatenation of two lists.
     */
    Conc : List(a) * List(a) -> List(a)