let range min max = min+(Random.int (max-min))
let pick ar = ar.(range 0 (Array.length ar))
let rule (items : string list Lazy.t array) = let syntax = Lazy.force(pick items) in
    List.fold_left (^) "" syntax 
let choice ar = Lazy.force(pick ar)
type person = {
    nom : string;
    gen : string;
    acc : string;
}

let victims = [|
    {nom="you";gen="your";acc="you"};
|]
let insults = [|
    "bitch"; "cunt"; "freak"; "douchebag";
    "bastard";
|]
let action victim = rule [|
    lazy ["port "; victim.acc; " to lisp"];
    lazy ["rain on "; victim.gen; " parade"];
|]
let intros () =
    let vocative () = match range 0 3 in
        | 0 -> "you"
        | 1 -> pick insults
        | 2 -> "you, " ^ (pick insults) in
    rule [|
        lazy ["listen up, "; vocative (); "!
|]
let threat () = (intros()) ^ " " ^ (action (pick victims)) 
let () =
    Random.self_init();
    print_string (threat ())
