type t is int * string
type u is t
type v is record foo: key; bar: mutez; baz: address end
type w is K of (U of int) (*v * u*)

storage s : w     // Line comment
operations o : u;

type i is int;

(* Block comment *)

entrypoint g (const l : list (int)) is
   function f (const x : int) : int is
     var y : int := 5 - x
     const z : int = 6
     begin
       y := x + y
     end with y * 2
  begin
     match l with
         [] -> null
     | h#t -> q (h+2)
     end;
     begin
       g (Unit);
       fail "in extremis"
     end
  end