its semantics includes unchanging values pure functions and static typing with type inference