enso/docs/syntax
Pavel Marek 9010cf93be
Extension methods can be exported by name (#10274)
Ultimately, we want to forbid the `from ... export all` syntax. This PR starts by providing a way to explicitly export extension and conversion methods by name.

Stdlib code will be modified in upcoming PR.

# Important Notes
A single name can refer to multiple extension or conversion methods. Exports are not qualified. For example,
```
type My_Type
type Other_Type
My_Type.ext_method x = x
Other_Type.ext_method x = x
```
```
from project.Mod export ext_method
```
will export both `My_Type.ext_method` and `Other_Type.ext_method`.
2024-06-25 12:08:22 +00:00
..
assignment.md Add a markdown style guide (#1022) 2020-07-21 13:59:40 +01:00
comments.md Make Random.Seed private. Remove unused TEXT_ONLY (#8783) 2024-01-17 17:15:51 +00:00
encoding.md Add a markdown style guide (#1022) 2020-07-21 13:59:40 +01:00
function-arguments.md Add a markdown style guide (#1022) 2020-07-21 13:59:40 +01:00
functions.md Extension methods can be exported by name (#10274) 2024-06-25 12:08:22 +00:00
imports.md Export works without import (#9683) 2024-04-12 14:23:34 +02:00
layout.md Add a markdown style guide (#1022) 2020-07-21 13:59:40 +01:00
literals.md Vue dependency update, better selection performance, visible quotes in text inputs (#9204) 2024-03-06 15:34:07 +00:00
macros.md Complete the implementation of the Enso lexer (#1177) 2020-10-30 14:06:24 +00:00
naming.md Update 'naming' docs (#3858) 2022-11-24 12:55:42 +00:00
projections.md Add a markdown style guide (#1022) 2020-07-21 13:59:40 +01:00
README.md Add a markdown style guide (#1022) 2020-07-21 13:59:40 +01:00
top-level.md Add a markdown style guide (#1022) 2020-07-21 13:59:40 +01:00
types.md Use .. to identify autoscoped constructors (#9285) 2024-03-06 10:28:15 +01:00

layout title category tags order
section-summary Enso's Syntax syntax
syntax
readme
0

Enso's Syntax

When working with a programming language, the syntax is the first thing that a user encounters. This makes it utterly integral to how users experience the language, and, in the case of Enso, the tool as a whole.

Enso is a truly novel programming language in that it doesn't have one syntax, but instead has two. These syntaxes are dual: visual and textual. Both are first-class, and are truly equivalent ways to represent and manipulate the program. To that end, the design of the language's syntax requires careful consideration, and this document attempts to explain both the what, of Enso's syntax, but also the why.

Furthermore, Enso is novel in the fact that it does not enforce any artificial restriction between the syntaxes of its type and value levels: they are one and the same. This enables a staggering level of uniformity when programming in the language, allowing arbitrary computations on types, because in a dependently-typed world, they are just values.

The various components of Enso's syntax are described below: