(* -*- tuareg -*- *)

module Let_syntax = struct
  type 'a t = T of 'a

  let map (T x) ~f = T (f x)
  let both (T x) (T y) = T (x, y)

  module Open_on_rhs = struct
    let return x = T x
    let f x ~(doc : string) = T (x, doc)
  end
end

let _ =
  [%map_open
    let x = return 42
    and y = f 42 in
    ()]
;;

[%%expect
  {|
Line _, characters 12-16:
Error: This expression has type doc:string -> (int * string) Let_syntax.t
       but an expression was expected of type 'a Let_syntax.t
|}]
