{"responseHeader":{"status":0,"QTime":7,"params":{"q":"{!q.op=AND}id:\"108275\"","hl":"true","hl.simple.post":"","hl.fragsize":"5000","fq":"!embargo_tdt:[NOW TO *]","hl.fl":"ocr_t","hl.method":"unified","wt":"json","hl.simple.pre":""}},"response":{"numFound":1,"start":0,"docs":[{"modified_tdt":"2016-11-18T00:00:00Z","thumb_s":"/e6/98/e698a004b4eb603f6c6e64d9e9248eddaf69dd7f.jpg","oldid_t":"compsci 16388","setname_s":"ir_computersa","file_s":"/99/e0/99e06181ae3379faef5eea1016a5a8baff04ed48.pdf","title_t":"Page 32","ocr_t":"Rules 4 and 5 state that types which are unbound type variables followed by ] are treated like any other type variables. Therefore the result of unify(a], int) is ((a <- int), ai'f). 4) If s i = a] where a is unbound, bind a to s2, return (Env -f- (a<- s2), a f ) 5) If s2 = a ] where a is unbound, bind a to s i, return (Env + (a<- s i), a t ) Rules 6, 7, 8 cover the nonvariable types with ]. Rule 6 states that if both values have ] suffixes and there exists a nonempty solution of the two values after a pushUp then the solution is also suffixed with ]. The most interesting case occurs when there is no solution to the recursive call. For example, unify (int], boot]) will result in the recursive call unify (int, bool) which has an empty solution. Because both original arguments had ] and did not agree otherwise, their only agreement is any. Rules 7 and 8 state that if one of the types has ] but the other does not, the solution is not suffixed with ]. For example, unify (int, int]) gives solution int, not int]. 6) If s i and s2 are of the form X] , Y f , let (NewEnv, Solution) = unify(pushllp(X), pushUp(Y), Env) in if Solution is empty, return (Env, any) else return (NewEnv, solution!) 7) If s i is of the form X] , return unify(pushUp(X), s2, Env) 8) If s2 is of the form X|, return unify(sl, pushllp(X), Env) 26","restricted_i":0,"id":108275,"created_tdt":"2016-11-18T00:00:00Z","format_t":"application/pdf","parent_i":108288,"_version_":1642982405327290369}]},"highlighting":{"108275":{"ocr_t":[]}}}