Module Perk.Typecheck

Typechecks a set of toplevel definitions, instancing the inferred types.

val library_functions : (Ast.perkident * Ast.perktype) list Stdlib.ref

List of library functions and their types : (perkident * perktype) list ref

val import_path_list : string list Stdlib.ref

List of import paths

val get_lib_path : string -> string

gathers the path(s) where libraries are located

val is_numerical : ('a * Ast.perktype_partial * 'b) -> bool

check if type is numerical

val numerical_rank : Ast.perktype -> int

provides an integer ranking of numerical types: higher values are least general types

val typecheck_program : Ast.topleveldef_a list -> Ast.topleveldef_a list

typechecks a set of toplevel definitions, instancing the inferred types

val typecheck_deferred_function : Ast.topleveldef_a -> Ast.topleveldef_a

Typechecks functions after everything else

val typecheck_topleveldef : Ast.topleveldef_a -> Ast.topleveldef_a

Typechecks toplevel definitions

val typecheck_command : ?retype:Ast.perktype option -> Ast.command_a -> Ast.command_a

Typechecks commands

val typecheck_expr : ?expected_return:Ast.perktype option -> Ast.expr_a -> Ast.expr_a * Ast.perktype

Typechecks expressions

val typecheck_expr_list : Ast.expr_a list -> Ast.perktype list -> (Ast.expr_a * Ast.perktype) list

Typechecks parameters

val match_types : ?coalesce:bool -> ?array_init:bool -> Ast.perktype -> Ast.perktype -> Ast.perktype

Checks if two types are the same or not.

val match_type_list : Ast.perktype list -> (Ast.expr_a * Ast.perktype) list -> Ast.perktype list

CHecks if an argument list and a type list have the same types elementwise.