Felix has a few funny symbols, like @T, stuff with $ and #,
and a lot of syntax is overloaded in a way that isn't always so consistent.
Only one character is unused: ` (backtick).
Now, in considering the idea we write
@T = opt[T]
so we can write
@+T
for a possibly NULL incrementable pointer, I find I would prefer
?T
for an option type. Agrees with regexp notation. A bit more obvious.
At the same time we have this horrible wart:
match .. with | Some ?x => .. | None => ...
and it turns out this doesn't conflict at all with ?T. However
this case does:
typematch .. with | ?D -> ?C => ...
because type patterns are parsed as expressions not patterns,
whereas value patterns have their own syntax (there's a reason:
we may want "pattern calculus" for type patterns where the pattern
is an evaluable expression).
Now, i could change the value pattern syntax:
match .. with
| Some x => ... // no ? needed!
| #None => .. // the # is the price for ?
The trick is to parse
name name
as
constructor pattern-variable
since you cannot have applications in patterns. Although we cannot
do curried constructors at the moment, this should still work.
This leaves the problem with type matches. You would have to write
typematch .. | #int => ..
to match an int. Type matches don't support constructors at the moment.
[There are no meta-unions .. yet!] Type matches are harder to deal
with because whereas value literals are clear: 1, "hello" etc,
any non-polymorphic type expression is a literal in a type match.
So the type literals must be distinguished from type pattern variables
and the "application" trick cannot distinguish type literals
from constant constructors, let alone non-constant constructors
if we ever get them.
Actually the syntax should be:
typematch ... | $(int) => ...
because in an ordinary match
match .. | $(x) => ..
actually means
match .. | ?a where a == x => ...
however type matches aren't used much, so perhaps it doesn't matter :)
bottom line: use @T for opt[T] or ?T and then #None in matches...
--
john skaller
[email protected]
http://felix-lang.org
------------------------------------------------------------------------------
Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester
Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" in the
endpoint security space. For insight on selecting the right partner to
tackle endpoint security challenges, access the full report.
http://p.sf.net/sfu/symantec-dev2dev
_______________________________________________
Felix-language mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/felix-language