OK, I think this is the way forward here. A new bound combinator is introduced
for tuples:
BTYP_tuple_cons of t * t
This combinator is only intended to be used in pattern matching.
It has the following invariant: the second t above must be a BTYP_tuple_cons
or a BTYP_tuple [] (i.e. a unit).
Introducing the *right associative* binary operator ** for this (ugly but will
do for now) we have:
a * b * c = a ** b ** c ** 1 = a ** (b ** ( c ** 1))
With this, we can say:
typedef fun tuple_map (f:T->T) (x:T) =>
typematch T with
| ?last ** 1 => f last
| ?head ** ?tail => f last ** tuple_map f tail
endmatch
;
which allows us to recursively map a tuple (for example). We'd need a similar
construction for sums.
To make this work, we basically need to allow unification:
BTYP_tuple_cons (t1, t2) = BTYP_tuple (t1' :: t2')
by setting equation
t1 = t1'
AND:
if t2' = [] then t2 = BTYP_tuple []
else
t2 = BTYP_tuple t2'
which will lead to recursively reconsidering an equation of the first form,
but with one less term (the head stripped off).
The point of this form is that the tail of a tuple can be represented by a
single
type variable.
When this form is used outside pattern matching it would act as a tuple type
constructor. A similar form like ,, could be used for value matching and
construction.
We have to be careful though. We could actually use this form universally
and get rid of BTYP_tuple entirely. However because of the invariant it
is not a true type combinator (but then .. neither is array).
It's not clear exactly how to "get rid of" all uses of this term except in
pattern matches.
--
john skaller
[email protected]
http://felix-lang.org
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Felix-language mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/felix-language