Advertisement
Guest User

Untitled

a guest
May 29th, 2016
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 0.51 KB | None | 0 0
  1. type foo = [`Foo]
  2. [@@deriving show]
  3.  
  4. type foobar = [ foo | `Bar ]
  5.  
  6. module M = struct
  7.   let do_stuff_with_foo (param: foo) =
  8.     Printf.printf "foo: %s"  (show_foo param);
  9.     param
  10.  
  11.   let do_stuff (param: [> foo] as 'res): 'res =
  12.     let res: 'res =
  13.       match param with
  14.       | `Foo as f   -> begin
  15.           let foo' = do_stuff_with_foo f in
  16.           (foo' :> 'res)
  17.         end
  18.       | _ as other  -> (other :> 'res)
  19.     in
  20.     res
  21.  
  22. end
  23.  
  24. let main () =
  25.   let bar = `Bar in
  26.   M.do_stuff bar
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement