I am stumped at the moment defining certain operators on tuples.

If you look at src/lib/std/datatype/tuple.flx you will see there is general way
to apply a function

        T -> K
        T * T -> K

to a tuple, where K is a constant type. For example 

        T -> string         // Str
        T * T -> bool  // Eq

are defined. See also that we can do

        F T0, F T1 ... F TN -> F (T0, T1 .. TN)

in some cases, such as in src/lib/std/algebra/set.flx we can "almost" define

        \otimes (set_form[T0], set_form[T1],.. set_form[TN] )

I say almost because actually we can do 

var x = { x: int | x > 0} \otimes { x: double | x > 0.0} \otimes { x:string | x 
> "H" };
println$ (24,3.2,"Hello") \in x;

but this is right associative. What I REALLY want to define is:

        \otimes (s1,s2,s3);

but this doesn't work. It would be a "generic fold".

Another example:

  //$ parallel composition
  // notation: f \times g
  fun ravel[u1,u2,r1,r2] (f1:u1->r1,f2:u2->r2) : u1 * u2 -> r1 * r2 => 
    fun (x1:u1,x2:u2) => f1 x1, f2 x2;

This function takes a pair of functions, and makes them into a single
function accepting the product of the domains as its domain and the
product of its codomains as the codomain.

It's easy to define this for 3 or 4 components, but I want to define it
for an *arbitrary* length tuple.

--
john skaller
skal...@users.sourceforge.net
http://felix-lang.org




------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud 
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to