aboutsummaryrefslogtreecommitdiff
path: root/src/content/chapter5_advanced_features/lesson04_externals/en.html
blob: 8815fa70ff7b4d149f8d9025b7ebb29c548687bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<p>
  Sometimes in our projects we want to use code written in other languages, most
  commonly Erlang and JavaScript, depending on which runtime is being used.
  Gleam's <em>external functions</em> and <em>external types</em> allow us to
  import and use this non-Gleam code.
</p>
<p>
  An external type is one that has no constructors. Gleam doesn't know what
  shape it has or how to create one, it only knows that it exists.
</p>
<p>
  An external function is one that has the <code>@external</code> attribute on
  it, directing the compiler to use the specified module function as the
  implementation, instead of Gleam code.
</p>
<p>
  The compiler can't tell the types of functions written in other languages, so
  when the external attribute is given type annotations must be provided. Gleam
  trusts that the type given is correct so an inaccurate type annotation can
  result in unexpected behaviour and crashes at runtime. Be careful!
</p>
<p>
  External functions are useful but should be used sparingly. Prefer to write
  Gleam code where possible.
</p>