Format uncurried
  $ refmt ./input.re
  f(.);
  
  [@attr]
  f(.);
  
  f(.);
  
  f(. a, b, c);
  
  [@attr]
  f(. a, b, c);
  
  f(. a);
  
  f(. (1, 2));
  
  f([@bs] (1, 2));
  
  f(. [@bs] (1, 2));
  
  f(. (1, 2), (3, 4));
  
  f(. [@bs] (1, 2), [@bs] (3, 4));
  
  (f(. [@bs] (1, 2)))(. [@bs] (3, 4));
  
  f(. "string");
  
  f(. "string", "2string");
  
  (f(. "string"))(. "2string");
  
  (f(. [@bs] "string"))(. [@bs] "2string");
  
  f(. 1);
  
  f(. [@bs] 1);
  
  f(. {
    a: "supersupersupersupersupersuperlong",
    b: "supersupersupersupersupersuperlong",
  });
  
  let f = (. a, b) => a + b;
  
  let f = [@attr] ((. a, b) => a + b);
  
  let f = (. a, b) => a + b;
  
  let f = ("hello", (. b, c) => b + c);
  
  let f = ("hello", [@attr] ((. b, c) => b + c));
  
  let f = ("hello", (. b, c) => b + c);
  
  let obj: tesla = {
    pub drive = (. speed, safe) => (speed, safe);
    pub drive2 =
      [@attr] ((. speed, safe) => (speed, safe));
    pub park = (.) => ();
    pub park2 = [@attr] ((.) => ())
  };
  
  type f = (. int, int) => int;
  
  type f = [@attr] ((. int, int) => int);
  
  type f = (. int, int) => int;
  
  type z = (. unit) => unit;
  
  type z = [@attr] ((. unit) => unit);
  
  type z = (. unit) => unit;
  
  type tesla = {. drive: (. int, int) => int};
  
  class type _rect =
    [@bs]
    {
      [@bs.set]
      pub height: int;
      [@bs.set]
      pub width: int;
      pub draw: unit => unit;
    };
  
  class type _rect =
    [@u]
    {
      [@bs.set]
      pub height: int;
      [@bs.set]
      pub width: int;
      pub draw: unit => unit;
    };
  
  funWithCb("text", (.) => doStuff());
  
  funWithCb("text", (. test) => doStuff());
  
  funWithCb("text", [@attr] (. arg) => doStuff());
  
  test(~desc="my test", (.) => {
    let x = a + b;
    let y = z + c;
    x + y;
  });
  
  test(~desc="my test", [@attr] (. a, b, c) => {
    let x = a + b;
    let y = z + c;
    x + y;
  });
  
  Thing.map(
    ~a=?foo,
    ~b=?bar,
    ~c=?baz,
    ~d=?foo2,
    ~e=?bakjlksjdf,
    ~f=?okokokok,
    ~cb=[@attr] (. abc, z) => {
      let x = 1;
      MyModuleBlah.toList(x, argument);
    },
  );
  
  type f = int => (. int) => unit;
  
  type f = int => (. int) => unit;
  
  add(. 2);
  
  (add(. 2))(. 3);
  
  add(. 2, [@bs] 3);
  
  ((add(. 2, 3, 4))(. 5, 6, 7))(. 8, 9, 10);
  
  type timerId;
  
  [@bs.val]
  external setTimeout:
    ((. unit) => unit, int) => timerId =
    "setTimeout";
  
  let id =
    setTimeout((.) => Js.log("hello"), 1000);
  
  let id =
    setTimeout(1000, (.) => Js.log("hello"));
  
  foo([@bs] {val a = 1});
  
  foo(. [@bs] {val a = 1});
  
  foo(. [@bs] {val a = 1});
  
  foo([@attr1] [@bs] [@attr2] {val a = 1});
  
  add([@attr] [@bs] [@attr] 1);
  
  add(. [@attr] [@bs] [@attr] 1);
  
  add(. [@attr] [@bs] [@attr] 1);
  
  let a = foo(. foo(. 3));
  
  let a = foo(. foo(. 3));
  
  (add(1, 2))(. 3, 4);
  
  (add(1))(. 2, 3, 4);
  
  (add(1, 2, 3))(. 4);
  
  let run =
      (
        ~dry as [@attr] dry: bool=false,
        ~mMap: string=?,
        logger,
      ) => {};
  
  f(. _ => 1);
  
  f(. a, _ => 1);
  
  f(. a, (. _) => 1);
  
  let u =
    (. ~f: t, a, b) => {
      f(. ~x=a, ~y=b)->Js.log;
      f(. ~y=b, ~x=a)->Js.log;
    };
