For example, to define a function, you used to do (still the case on the online repository):
// An accumulating implementation of the factorial function. Tail recursive.
((Int -> Int) #
def factorial x
((fact 1 x))
where
((Int -> Int -> Int #
def fact acc i
((if (i > 0)
((fact (i * acc) (i - 1)))
(acc))))))
That was okay because the syntax is unambiguous and was not affected by whitespace.
However, I thought it would make it clearer whether what you were looking at is a function application or a code block if it were to use curly braces.
This was especially a problem with where clauses! Multiple closing parenthesis are very ugly.
So the above function will now be written as:
// An accumulating implementation of the factorial function. Tail recursive.
(Int -> Int) #
def factorial x
{
(fact 1 x)
}
where
{
(Int -> Int -> Int) #
def fact acc i
{
if (i > 0)
// Recurse
{(fact (i * acc) (i - 1))}
// We've recursed enough. Return.
{acc}
}
}
It looks much tidier, and still doesn't care about whitespace, which is great.
Edit: I'm still not so happy with it. The if statement looks ugly. Perhaps ruby style do and end would look nicer.
Edit2: Fixed it, removed need for functional application parenthesis around if expression.
Aye, but I only just realized how fucking massive these fonts are. Jeebus!
ReplyDelete