
  $ cat > exprs.ml << "EOF"
  > f "foo"
  >   g
  >   [   1;
  >       2]
  > ;;
  > 
  > let x =
  >   f 1 ((x 3)
  >        || (x f)
  >           lor (g lsl k)
  >           lor g
  >           && g
  >              lsr g)
  > 
  > let f x =
  >   g
  >     (fun x -> x)
  >     []
  >     x:x
  >       ?y:z
  >       ()
  >       0
  > 
  > let f
  >     ~p
  >     ~g
  >     ()
  >     ?k
  >     () =
  >   let x = 0 in
  >   p
  > 
  > let f =
  >   for i = 0 to 1; do
  >     a;
  >     b;
  >   done;
  >   x
  > 
  > external f :
  >   'a -> x : int -> t  
  >   = "b"
  > 
  > external g :
  >   x : t -> s : i -> d : t -> unit
  >   = "b2"
  > 
  > let f ?(g = []) v ?(x = 0) ?l b =
  >   let l = g b ~p l in
  >   c ~l:"foo" b ~p ~l;
  >   u v ~p ~l b f
  > 
  > let f () =
  >   g x y
  >     ?x:y ?y:w
  >     ~a:b
  > 
  > let f () =
  >   f (fun () ->
  >       for i = 0 to 10 do
  >         g
  >       done;
  >       x
  >     )
  > 
  > external f: int -> int = "foo"
  > 
  > let f () =
  >   for i = 0 to 10 do
  >     g
  >   done
  > 
  > let f () =
  >   { x = 1;
  >     y = 2;
  >   }
  > 
  > let f () = {
  >   x = 1;
  >   y = 2;
  > }
  > 
  > let f () =
  >   {
  >     x = 1;
  >     y = 2;
  >   }
  > 
  > let f () =
  >   { x = 1
  >   ; y = 2 }
  > 
  > let f x =
  >   if x then
  >     x
  >   else
  >     f @@ fun () ->
  >     g;
  >     h
  > 
  > let funct param
  >   : A_very_long_module_name.t t1
  >     * t2
  >   =
  >   something
  > EOF

  $ ocp-indent exprs.ml
  f "foo"
    g
    [   1;
        2]
  ;;
  
  let x =
    f 1 ((x 3)
         || (x f)
            lor (g lsl k)
            lor g
            && g
               lsr g)
  
  let f x =
    g
      (fun x -> x)
      []
      x:x
        ?y:z
        ()
        0
  
  let f
      ~p
      ~g
      ()
      ?k
      () =
    let x = 0 in
    p
  
  let f =
    for i = 0 to 1; do
      a;
      b;
    done;
    x
  
  external f :
    'a -> x : int -> t  
    = "b"
  
  external g :
    x : t -> s : i -> d : t -> unit
    = "b2"
  
  let f ?(g = []) v ?(x = 0) ?l b =
    let l = g b ~p l in
    c ~l:"foo" b ~p ~l;
    u v ~p ~l b f
  
  let f () =
    g x y
      ?x:y ?y:w
      ~a:b
  
  let f () =
    f (fun () ->
        for i = 0 to 10 do
          g
        done;
        x
      )
  
  external f: int -> int = "foo"
  
  let f () =
    for i = 0 to 10 do
      g
    done
  
  let f () =
    { x = 1;
      y = 2;
    }
  
  let f () = {
    x = 1;
    y = 2;
  }
  
  let f () =
    {
      x = 1;
      y = 2;
    }
  
  let f () =
    { x = 1
    ; y = 2 }
  
  let f x =
    if x then
      x
    else
      f @@ fun () ->
      g;
      h
  
  let funct param
    : A_very_long_module_name.t t1
      * t2
    =
    something
