let prim2 (prim: string) (r1: rslt) (r2: rslt)
: rslt =
begin match (prim, r1, r2) with
| ("==", _, _) -> Bool_value(r1 = r2)
| ("||", Bool_value(bl1), Bool_value(bl2)) -> Bool_value(bl1 || bl2)
| ("&&", Bool_value(bl1), Bool_value(bl2)) -> Bool_value(bl1 && bl2)
| ("+", String_value(s1), String_value(s2)) -> String_value(s1 ^ s2)
| ("*", Int_value(n1), Int_value(n2)) -> Int_value(n1 * n2)
| ("+", Int_value(n1), Int_value(n2)) -> Int_value(n1 + n2)
| ("-", Int_value(n1), Int_value(n2)) -> Int_value(n1 - n2)
| ("addtourl", Url_value(u), String_value(s)) -> Url_value
( match u with
| Blank_url -> Blank_url
| Http_url (domain, {req_uri_path = {path_value=path};
req_uri_params = params}) ->
Http_url (domain, {req_uri_path = {path_value=path};
req_uri_params = params ^ "?t=" ^ s})
)
| (_, (Error(_) as r1), _) -> r1
| (_, _, (Error(_) as r2)) -> r2
| (_, _, _) ->
Error (
"primitive operation (" ^ prim ^
") is not implemented for these types")
end