28 lines
497 B
Plaintext
28 lines
497 B
Plaintext
|
(* -*- 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
|
||
|
|}]
|