2016-03-09 19:44:54 +04:00
|
|
|
(* -*- 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 45-49:
|
2016-07-12 20:08:10 +04:00
|
|
|
Error: This expression has type doc:string -> (int * string) Let_syntax.t
|
2016-03-09 19:44:54 +04:00
|
|
|
but an expression was expected of type 'a Let_syntax.t
|
|
|
|
|}]
|