On 20/11/2010, at 12:24 AM, john skaller wrote: > > CLIENT ERROR > [bind_exe: fun_return ] return of index_8651<8651>[<T8648>, <T8649>]: > fun return type: > list[<T8648>] -> list[<T8649>] > must have same type as return expression: > list[<T8648>] -> (list[<T8648>] -> list[<T8649>]) > In build/release-optimized/lib/std/list.flx: line 123, cols 1 to 3 > 122: return aux x Empty[U]; > 123: } > *** > 124: > > Clearly the same bug .. why can't I see what it is?
Hmmm .... Here's the trick .. if a function f has index i, its return type is initially set to arg -> Ti where Ti is a type variable. This allows forming a term based on the return type, and then solving for the type variables of several function at once (think mutually recursive functions). This is done by "do_unify". The variables are stored in state.syms.varmap. They're both hashtables.. type typevarmap_t = (Flx_types.bid_t, Flx_btype.t) Hashtbl.t ticache : (bid_t, Flx_btype.t) Hashtbl.t; OMG .. same type, I just bet I mixed them up! -- john skaller skal...@users.sourceforge.net ------------------------------------------------------------------------------ Beautiful is writing same markup. Internet Explorer 9 supports standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3. Spend less time writing and rewriting code and more time creating great experiences on the web. Be a part of the beta today http://p.sf.net/sfu/msIE9-sfdev2dev _______________________________________________ Felix-language mailing list Felix-language@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/felix-language