Here we're running into the dreaded syntax tar pit, where everything is
subjective. ;)
I don't like the name duplication from your second version, which is
indeed supported by Standard ML, the biggest inspiration for Ur/Web syntax.
I also like having fewer orthogonal constructs in the language. Since
explicit [case] is necessary in some places, I like the idea of making
it the only way to do pattern matching.
It's possible I could be convinced to tweak the syntax in one of the
ways you're suggesting, but I'm inclined against it, for the reasons
I've given. More verbose code can be more readable code!
On 06/17/2014 11:13 PM, Timothy Beyer wrote:
At Tue, 17 Jun 2014 19:38:58 -0700,
Timothy Beyer wrote:
I'd rather write something like the following (assuming that arguments are
treated as a tuple of values):
fun mapX [a] (f : (unit -> list a) -> a -> xbody) (ls : list a) : xbody =
let
fun mapX' (ls, acc) =
([], _) => <xml/>
| (x :: ls, _) => <xml>{f (fn () => List.revAppend acc ls) x}{mapX' (ls, (x
:: acc))}</xml>
in
mapX' (ls, [])
end
Alternatively, is something like the code below possible?
fun mapX [a] (f : (unit -> list a) -> a -> xbody) (ls : list a) : xbody =
let
fun mapX' ls acc =
| mapX' [] _ = <xml/>
| mapX' (x :: ls) _ = <xml>{f (fn () => List.revAppend acc ls) x}{mapX' ls
(x :: acc)}</xml>
in
mapX' ls []
end
_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur