We avoided these originally because we wanted Harlan to feel like a dynamically-typed language--that is, the programmer would never have to see or write a type annotation. We've strayed away from this now with ADTs and external function declarations, so it makes sense now to optionally allow type annotations. For example, instead of (define (foo a b) ...) we could write (define (foo (a : float) (b : Expr)) ...).
These type annotations would be allowed in any binding position, such as kernel, let and match expressions.
We avoided these originally because we wanted Harlan to feel like a dynamically-typed language--that is, the programmer would never have to see or write a type annotation. We've strayed away from this now with ADTs and external function declarations, so it makes sense now to optionally allow type annotations. For example, instead of
(define (foo a b) ...)
we could write(define (foo (a : float) (b : Expr)) ...)
.These type annotations would be allowed in any binding position, such as
kernel
,let
andmatch
expressions.This needs to play nicely with #127.