%0 Table {compare_types.Relation Any Any;is_num.Any;strict_type.Relation Any Any Any;strictest_type.Relation Any Any Any;string_to_type.Relation Any Any;toString.Relation Any Any;to_string.Relation Any Any;type_to_string.Relation Any Any} % Cons Functor % module % type2 types2_type2(_s,_i,_final,_type,_upvals):-_upvals=[__string_to_type,_parse_dict,__string_to_type,_string,__string_to_type,_string,_string,_string,_string,_string,_debug,_match_until_space],(call_cl(_match_until_space,[_s,_i,_j]),call_cl(_debug,[_j]),(((get_(_string,"at",T67),_T66 = T67,{_j-1.0=T68},call_cl(_T66,[_s,T68,")"])),(get_(_string,"slice",T70),_T69 = T70,{_j-1.0=T71},call_cl(_T69,[_s,_i,T71,_s1]),_type = '[|]'(_s1,[]),_final = _j);get_(_string,"slice",T73),_T72 = T73,call_cl(_T72,[_s,_i,_j,_s1]),(((get_(_string,"size",T75),_T74 = T75,call_cl(_T74,[_s,_j])),(_type = '[|]'(_s1,[]),_final = _j);get_(_string,"at",T77),_T76 = T77,calc(_j+1.0,T78),call_cl(_T76,[_s,T78,_c]),calc("$"+_c,T79),writeln_(T79),((_c = "(",calc(_j+2.0,T80),call_cl(__string_to_type,[_s,T80,_final0,_t0]),(((get_(_string,"size",T82),_T81 = T82,call_cl(_T81,[_s,_final0])),(_type = [_s1|'[|]'(_t0,[])]);calc(_final0+1.0,T83),call_cl(__string_to_type,[_s,T83,_final,_t1]),_t1 = '[|]'(_a,_b),_type = [_s1|[_t0|['[|]'(_a,[])|_b]]])));(dif(_c,"("),(_c = "{",calc(_j+2.0,T84),call_cl(_parse_dict,[_s,T84,_final,_type]));(dif(_c,"{"),calc(_j+1.0,T85),call_cl(__string_to_type,[_s,T85,_final,_t0]),_t0 = '[|]'(_a,_b),_type = [_s1|['[|]'(_a,[])|_b]])))))))). % parse_dict types2_parse_dict(_s,_i,_final,_type,_upvals):-_upvals=[_string,_string,_string_to_type,_match_until],(once(call_cl(_match_until,[_s,_i,_i2,"}"])),__fn = _string_to_type,get_(_string,"split",T62),_T61 = T62,get_(_string,"slice",T65),_T64 = T65,call_cl(_T64,[_s,_i,_i2,_T63]),call_cl(_T61,[_T63,";",_T60]),_l = _T60,writeln_(_l),_i2 = _final). % main types2_main(_x,_upvals):-_upvals=[_debug,_string_to_type,_debug,_string_to_type,_debug,_string_to_type,_debug,_string_to_type,_debug,_string_to_type,_debug,_string_to_type],(call_cl(_string_to_type,["rel (Any)",_T54]),call_cl(_debug,[_T54]),call_cl(_string_to_type,["Relation Any",_T55]),call_cl(_debug,[_T55]),call_cl(_string_to_type,["Relation (Functor Any)",_T56]),call_cl(_debug,[_T56]),call_cl(_string_to_type,["Rel (Rel Num Str) Str Num",_T57]),call_cl(_debug,[_T57]),call_cl(_string_to_type,["Rel Rel Num Str Num",_T58]),call_cl(_debug,[_T58]),call_cl(_string_to_type,["Rel (Rel Num (Rel Str) Num) Str Num",_T59]),call_cl(_debug,[_T59])). % has_type types2_has_type(_env,_x,_s,_upvals):-_upvals=[_compare_types,_parse_type,_get_type],(call_cl(_get_type,[_env,_x,_type1]),call_cl(_parse_type,[_s,_type2]),call_cl(_compare_types,[_type1,_type2])). % parse_type types2_parse_type(_s,_t,_upvals):-_upvals=[_string],(get_(_string,"split",T53),_T52 = T53,call_cl(_T52,[_s," ",_t])). % get_type types2_get_type(_env,_x,_s,_upvals):-_upvals=[],(_s = "Relation"). % string_to_type types2_string_to_type(_s,_type,_upvals):-_upvals=[__string_to_type],(call_cl(__string_to_type,[_s,0.0,_,_type])). % _string_to_type types2__string_to_type(_s,_i,_final,_type,_upvals):-_upvals=[_parse_dict_temp,_string,_string,_string,_string,_string,_string,_debug,_match_until_space],(call_cl(_match_until_space,[_s,_i,_j]),call_cl(_debug,[_j]),(((get_(_string,"at",T34),_T33 = T34,{_j-1.0=T35},call_cl(_T33,[_s,T35,")"])),(get_(_string,"slice",T37),_T36 = T37,{_j-1.0=T38},call_cl(_T36,[_s,_i,T38,_s1]),_type = '[|]'(_s1,[]),_final = _j);get_(_string,"slice",T40),_T39 = T40,call_cl(_T39,[_s,_i,_j,_s1]),(((get_(_string,"size",T42),_T41 = T42,call_cl(_T41,[_s,_j])),(_type = '[|]'(_s1,[]),_final = _j);get_(_string,"at",T44),_T43 = T44,calc(_j+1.0,T45),call_cl(_T43,[_s,T45,_c]),((_c = "(",calc(_j+2.0,T46),call(types2__string_to_type(_s,T46,_final0,_t0),_upvals),(((get_(_string,"size",T48),_T47 = T48,call_cl(_T47,[_s,_final0])),(_type = [_s1|'[|]'(_t0,[])]);calc(_final0+1.0,T49),call(types2__string_to_type(_s,T49,_final,_t1),_upvals),_t1 = '[|]'(_a,_b),_type = [_s1|[_t0|['[|]'(_a,[])|_b]]])));(dif(_c,"("),(_c = "{",calc(_j+2.0,T50),call_cl(_parse_dict_temp,[_s,T50,_final,_t1]),_type = '[|]'(_s1,_t1));(dif(_c,"{"),calc(_j+1.0,T51),call(types2__string_to_type(_s,T51,_final,_t0),_upvals),_t0 = '[|]'(_a,_b),_type = [_s1|['[|]'(_a,[])|_b]])))))))). % parse_dict_temp types2_parse_dict_temp(_s,_i,_final,_type,_upvals):-_upvals=[_match_until],(once(call_cl(_match_until,[_s,_i,_i2,"}"])),_type = '[|]'("*",[]),_i2 = _final). % match_until_space types2_match_until_space(_s,_i,_i2,_upvals):-_upvals=[_string,_string],((((get_(_string,"size",T29),_T28 = T29,call_cl(_T28,[_s,_i])),(_i = _i2);((get_(_string,"at",T31),_T30 = T31,call_cl(_T30,[_s,_i,_c])),(_c = " ",_i = _i2);calc(_i+1.0,T32),call(types2_match_until_space(_s,T32,_i2),_upvals))))). % match_until types2_match_until(_s,_i,_i2,_c,_upvals):-_upvals=[_string],((get_(_string,"at",T26),_T25 = T26,(call_cl(_T25,[_s,_i,_c]),_i = _i2);(safeNot(call_cl(_T25,[_s,_i,_c])),calc(_i+1.0,T27),call(types2_match_until(_s,T27,_i2,_c),_upvals)))). % strictest_type types2_strictest_type(_t1,_t2,_t3,_upvals):-_upvals=[_strict_type2,_debug,_strict_type_atomic,_is_dict],(((_t1 = '[|]'("Any",[]))->(_t3 = _t2);((_t2 = '[|]'("Any",[]))->(_t3 = _t1);((call_cl(_is_dict,[_t1]))->(_t3 = _t2);(_t1 = '[|]'(_a1,_b1),_t2 = '[|]'(_a2,_b2),call_cl(_strict_type_atomic,[_a1,_a2,_a3]),call_cl(_debug,[_a3]),((_b1 = [])->(_t3 = '[|]'(_a3,_b2));((_b2 = [])->(_t3 = '[|]'(_a3,_b1));(call_cl(_strict_type2,[_b1,_b2,_b3]),_t3 = '[|]'(_a3,_b3))))))))). % strict_type types2_strict_type(_t1,_t2,_t3,_upvals):-_upvals=[_strict_type2,_strict_type_atomic],(_t1 = '[|]'(_a1,_b1),_t2 = '[|]'(_a2,_b2),call_cl(_strict_type_atomic,[_a1,_a2,_a3]),((_b1 = [];_b2 = [])->(_t3 = '[|]'(_a3,[]));(call_cl(_strict_type2,[_b1,_b2,_b3]),_t3 = [_a3|_b3]))). % strict_type2 types2_strict_type2(_t1,_t2,_t3,_upvals):-_upvals=[_strict_type],(((_t1 = [],_t2 = [])->(_t3 = []);(_t1 = '[|]'(_a1,_b1),_t2 = '[|]'(_a2,_b2),call_cl(_strict_type,[_a1,_a2,_a3]),call(types2_strict_type2(_b1,_b2,_b3),_upvals),_t3 = [_a3|_b3]))). % strict_type_atomic types2_strict_type_atomic(_t1,_t2,_tc,_upvals):-_upvals=[],(((_t1 = "Any",_tc = _t2);(dif(_t1,"Any"),(_t1 = '[|]'("Object",_),_tc = _t1);(dif(_t1,'[|]'("Object",_)),(_t2 = '[|]'("Object",_),_tc = _t2);(dif(_t2,'[|]'("Object",_)),_tc = _t1))))). % compare_types types2_compare_types(_t1,_t2,_upvals):-_upvals=[_compare_types2,_compare_types_atomic],(_t1 = '[|]'(_a1,_b1),_t2 = '[|]'(_a2,_b2),call_cl(_compare_types_atomic,[_a1,_a2]),(((_b1 = [];_b2 = []),(true);call_cl(_compare_types2,[_b1,_b2])))). % compare_types2 types2_compare_types2(_t1,_t2,_upvals):-_upvals=[_compare_types],((((true),(_t1 = [],_t2 = []);_t1 = '[|]'(_a1,_b1),_t2 = '[|]'(_a2,_b2),call_cl(_compare_types,[_a1,_a2]),call(types2_compare_types2(_b1,_b2),_upvals)))). % compare_types_atomic types2_compare_types_atomic(_s1,_s2,_upvals):-_upvals=[_inherit,_inherit],(_s1 = "Any";_s2 = "Any";_s1 = _s2;call_cl(_inherit,[_s1,_s2]);call_cl(_inherit,[_s2,_s1])). % toStringFull types2_toStringFull(_l,_s,_upvals):-_upvals=[_type_to_string,_toStringDict],(_l = '[|]'(_a,_b),str(_a,T19),_s0 = T19,((is_assoc(_b))->(calc(_s0+" ",T20),calc(T20+"{",T21),call_cl(_toStringDict,[_b,_T22]),calc(T21+_T22,T23),calc(T23+"}",T24),_s = T24);(call_cl(_type_to_string,[_l,_s])))). % toStringDict types2_toStringDict(_t,_s,_upvals):-_upvals=[_list,_table,_type_to_string],(_to_string_ = _type_to_string,get_(_table,"map",T13),_T12 = T13,call_cl(_T12,[_t,clos([_to_string_,_table,_type_to_string],types2_2),_l]),get_(_list,"join",T18),_T17 = T18,call_cl(_T17,[_l,";",_s])). % 2 types2_2(_k,_s1,_s2,_upvals):-_upvals=[_to_string_,_table,_type_to_string],(calc(_k+".",T14),call_cl(_to_string_,[_s1,_T15]),calc(T14+_T15,T16),T16 = _s2). % toString types2_toString(_l,_s,_upvals):-_upvals=[],(_l = '[|]'(_a,_b),str(_a,T10),_s0 = T10,((is_assoc(_b))->(calc(_s0+" *",T11),_s = T11);(_s = _s0))). % is_dict types2_is_dict(_t,_upvals):-_upvals=[_inherit,_debug,_debug],(call_cl(_debug,[_t]),_t = '[|]'(_a,_b1),call_cl(_debug,[_a]),(((call_cl(_inherit,[_a,"Table"]);_a = "Table"),(true);false))). % inherit types2_inherit(_a,_b,_upvals):-_upvals=[],((((true),(_a = "Object",_b = "Table");_a = "Real",_b = "Number"))). % type_to_string types2_type_to_string(_t,_s,_upvals):-_upvals=[_str,_type_to_string2],(_t = '[|]'(_a,_b),_s1 = _a,call_cl(_type_to_string2,[_b,_s2]),call_cl(_str,[_s1,_s2,_s])). % type_to_string2 types2_type_to_string2(_t,_s,_upvals):-_upvals=[_str,_type_to_string3],(((_t = [],_s = "");(dif(_t,[]),_t = '[|]'(_a,_b),call_cl(_type_to_string3,[_a,_s1]),call(types2_type_to_string2(_b,_s2),_upvals),call_cl(_str,[_s1,_s2,_s])))). % str types2_str(_s1,_s2,_s,_upvals):-_upvals=[],(((_s2 = "",_s = _s1);(dif(_s2,""),calc(_s1+" ",T8),calc(T8+_s2,T9),_s = T9))). % type_to_string3 types2_type_to_string3(_t,_s,_upvals):-_upvals=[_type_to_string2],(_t = '[|]'(_s1,_b),call_cl(_type_to_string2,[_b,_s2]),((_s2 = "",_s = _s1);(dif(_s2,""),calc("("+_s1,T4),calc(T4+" ",T5),calc(T5+_s2,T6),calc(T6+")",T7),_s = T7))). % debug types2_debug(_x,_upvals):-_upvals=[],(true). % main types2(X):-_debug = clos([],types2_debug),creq1("string",_string,T1),call(T1,_string),creq1("table",_table,T2),call(T2,_table),creq1("list",_list,T3),call(T3,_list),_type_to_string3 = clos([_type_to_string2],types2_type_to_string3),_str = clos([],types2_str),_type_to_string2 = clos([_str,_type_to_string3],types2_type_to_string2),_type_to_string = clos([_str,_type_to_string2],types2_type_to_string),_inherit = clos([],types2_inherit),_is_dict = clos([_inherit,_debug,_debug],types2_is_dict),_toString = clos([],types2_toString),_toStringDict = clos([_list,_table,_type_to_string],types2_toStringDict),_toStringFull = clos([_type_to_string,_toStringDict],types2_toStringFull),_compare_types_atomic = clos([_inherit,_inherit],types2_compare_types_atomic),_compare_types2 = clos([_compare_types],types2_compare_types2),_compare_types = clos([_compare_types2,_compare_types_atomic],types2_compare_types),_strict_type_atomic = clos([],types2_strict_type_atomic),_strict_type2 = clos([_strict_type],types2_strict_type2),_strict_type = clos([_strict_type2,_strict_type_atomic],types2_strict_type),_strictest_type = clos([_strict_type2,_debug,_strict_type_atomic,_is_dict],types2_strictest_type),_match_until = clos([_string],types2_match_until),_match_until_space = clos([_string,_string],types2_match_until_space),_parse_dict_temp = clos([_match_until],types2_parse_dict_temp),__string_to_type = clos([_parse_dict_temp,_string,_string,_string,_string,_string,_string,_debug,_match_until_space],types2__string_to_type),_string_to_type = clos([__string_to_type],types2_string_to_type),_get_type = clos([],types2_get_type),_parse_type = clos([_string],types2_parse_type),_has_type = clos([_compare_types,_parse_type,_get_type],types2_has_type),_main = clos([_debug,_string_to_type,_debug,_string_to_type,_debug,_string_to_type,_debug,_string_to_type,_debug,_string_to_type,_debug,_string_to_type],types2_main),_parse_dict = clos([_string,_string,_string_to_type,_match_until],types2_parse_dict),_type2 = clos([__string_to_type,_parse_dict,__string_to_type,_string,__string_to_type,_string,_string,_string,_string,_string,_debug,_match_until_space],types2_type2),(((true),(true);true)),new(T86),set_(T86,"compare_types",_compare_types,T88),set_(T88,"strict_type",_strictest_type,T89),set_(T89,"strictest_type",_strictest_type,T90),set_(T90,"string_to_type",_string_to_type,T91),set_(T91,"to_string",_toString,T92),set_(T92,"is_num",_is_num,T93),set_(T93,"type_to_string",_toStringFull,T94),set_(T94,"toString",_toStringFull,T87),_t = T87,X=_t.