fix parser type

pull/4/head
Natapat Samutpong 2022-04-09 21:04:08 +07:00
parent 1cbb2a6f9a
commit 2af901f0cf
3 changed files with 12 additions and 26 deletions

View File

@ -31,7 +31,7 @@ fn typehint_parser() -> impl Parser<Token, Spanned<Typehint>, Error = Simple<Tok
(Typehint::Vector(Box::new(arg)), span)
});
let function = ty
let function = ty.clone()
.separated_by(just(Token::Comma))
.allow_trailing()
.delimited_by(
@ -39,7 +39,7 @@ fn typehint_parser() -> impl Parser<Token, Spanned<Typehint>, Error = Simple<Tok
just(Token::Pipe),
)
.then_ignore(just(Token::Arrow))
.then(single)
.then(ty)
.map_with_span(|(args, ret), span| {
(Typehint::Function(args, Box::new(ret)), span)
});

View File

@ -1,23 +1,23 @@
fun iter_ (vec: vec_int) (current: int): void = do
fun iter_ (vec: [int]) (fn: |int| -> int) (current: int): void = do
if current == @len(vec) then
do end
else
do
-- iter logic
-- TODO: function as argument
@get(vec, current) |> @write(_)
@get(vec, current)
|> fn(_)
|> @write(_)
@write("\n")
iter_(vec, current + 1)
iter_(vec, fn, current + 1)
end
end
end
fun iter (vec: vec_int): void = do
iter_(vec, 0)
end
fun iter (vec: [int]) (fn: |int| -> int): void = iter_(vec, fn, 0)
fun mul10 (x: int): int = x * 10
fun main: void = do
let foo: vec_int = [69, 420, 727, 1337, 42069, 69420]
iter(foo)
let foo: [int] = [69, 420, 727, 1337, 42069, 69420]
iter(foo, mul10)
end

View File

@ -1,14 +0,0 @@
fun mul (foo: int) (bar: int) : int = foo * bar
fun map
(fn: |int, int| -> int)
(to: int)
: int
= fn(to, 10)
fun main: void = do
let foo : int = 69
let bar : int = 10
map(mul, foo)
|> @write(_)
end