On 09/20/2012 11:33 PM, bearophile wrote:
Timon Gehr:mixin ADT!q{ Tree(T): Leaf(T x), Node(Tree a, Tree b) }; DynRange!T fringe(T)(Tree!T t){ return t.match!( (Leaf l) => cons(l.x, empty), (Node n) => chain(n.a.fringe, n.b.fringe).dynRange, ); } bool sameFringe(T)(Tree!T t1, Tree!T t2){ return equal(t1.fringe, t2.fringe); }What's the purpose of the dynRange suffix here? (Node n) => chain(n.a.fringe, n.b.fringe).dynRange
chain has type Result. dynRange takes an arbitrary range and transforms it into a range with the same value/vs reference behaviour whose static type depends only on the element type.
Maybe a "~" operator can be defined for such dynRanges, to avoid the chain().
Yes, that should certainly be done. (it can be more efficient.)
