
This includes a massive refactoring of the type checker, getting rid of most of the ets tables and keeping a proper environment.
32 lines
697 B
Plaintext
32 lines
697 B
Plaintext
|
|
namespace Lib =
|
|
|
|
// namespace Internal =
|
|
// function rev(xs, ys) =
|
|
// switch(xs)
|
|
// [] => ys
|
|
// x :: xs => rev(xs, x :: ys)
|
|
private
|
|
function rev(xs, ys) =
|
|
switch(xs)
|
|
[] => ys
|
|
x :: xs => rev(xs, x :: ys)
|
|
|
|
function reverse(xs : list('a)) : list('a) = rev(xs, [])
|
|
|
|
function eqlist(xs : list(int), ys : list(int)) =
|
|
switch((xs, ys))
|
|
([], []) => true
|
|
(x :: xs, y :: ys) => x == y && eqlist(xs, ys)
|
|
_ => false
|
|
|
|
contract TestNamespaces =
|
|
|
|
record state = { x : int }
|
|
|
|
function init() = { x = 0 }
|
|
|
|
function palindrome(xs : list(int)) : bool =
|
|
Lib.eqlist(xs, Lib.reverse(xs))
|
|
|