146 lines
18 KiB
HTML
146 lines
18 KiB
HTML
<!DOCTYPE html>
|
|
<html><head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
|
<title>test.gleam</title>
|
|
<meta name="generator" content="KF5::SyntaxHighlighting - Definition (Gleam) - Theme (Breeze Light)"/>
|
|
</head><body style="background-color:#ffffff;color:#1f1c1b"><pre>
|
|
<span style="color:#607880">//// Syntax test file for Gleam</span>
|
|
<span style="color:#607880">////</span>
|
|
<span style="color:#607880">//// This is a dummy example file and should not be taken as a reference of</span>
|
|
<span style="color:#607880">//// well written Gleam, but it does compile correctly appart from an error</span>
|
|
<span style="color:#607880">//// for the absent file "./ffi.mjs" and some warnings.</span>
|
|
<span style="color:#607880">////</span>
|
|
<span style="color:#607880">////</span>
|
|
<span style="color:#607880">////</span>
|
|
<span style="color:#607880">//// ## Top module documentation comment with markdown formatting</span>
|
|
<span style="color:#607880">////</span>
|
|
<span style="color:#607880">//// Formats: _italic text_, **bold text**, `monospace text`, ~~strikeout~~</span>
|
|
<span style="color:#607880">////</span>
|
|
<span style="color:#607880">//// Bullet list:</span>
|
|
<span style="color:#607880">////</span>
|
|
<span style="color:#607880">//// - item 1</span>
|
|
<span style="color:#607880">//// - item 2</span>
|
|
<span style="color:#607880">////</span>
|
|
<span style="color:#607880">//// Numbered list:</span>
|
|
<span style="color:#607880">////</span>
|
|
<span style="color:#607880">//// 1. item 1</span>
|
|
<span style="color:#607880">//// 2. item 2</span>
|
|
<span style="color:#607880">////</span>
|
|
<span style="color:#607880">//// [link](https://example.com)</span>
|
|
|
|
<span style="color:#898887">// </span><span style="color:#ca60ca;font-style:italic">SPDX-FileCopyrightText:</span><span style="color:#898887"> 2024 Louis Guichard <glpda+kde@pm.me></span>
|
|
<span style="color:#898887">// </span><span style="color:#ca60ca;font-style:italic">SPDX-License-Identifier:</span><span style="color:#ca60ca;font-style:italic"> </span><span style="color:#ca60ca;font-style:italic">MIT</span>
|
|
|
|
<span style="font-weight:bold">import</span> <span style="color:#ff5500">gleam/bit_array</span> <span style="font-weight:bold">as</span> <span style="color:#ff5500">bit_string</span>
|
|
<span style="font-weight:bold">import</span> <span style="color:#ff5500">gleam/bool</span>
|
|
<span style="font-weight:bold">import</span> <span style="color:#ff5500">gleam/dict</span><span style="color:#ca60ca">.{</span><span style="font-weight:bold">type</span> <span style="color:#0057ae">Dict</span><span style="color:#ca60ca">,</span> delete<span style="color:#ca60ca">,</span> get<span style="color:#ca60ca">,</span> insert<span style="color:#ca60ca">}</span>
|
|
<span style="font-weight:bold">import</span> <span style="color:#ff5500">gleam/io</span>
|
|
|
|
<span style="color:#898887">// </span><span style="color:#0057ae;background-color:#e0e9f8">BEGIN</span>
|
|
|
|
<span style="font-weight:bold">pub</span> <span style="font-weight:bold">fn</span> <span style="color:#644a9b">main</span><span style="color:#ca60ca">()</span> <span style="color:#ca60ca">{</span>
|
|
<span style="font-weight:bold">let</span> <span style="font-weight:bold">assert</span> <span style="color:#0057ae">Ok</span><span style="color:#ca60ca">(</span>prefix<span style="color:#ca60ca">)</span> <span style="color:#ca60ca">=</span> bit_string<span style="color:#ca60ca">.</span><span style="color:#644a9b">to_string</span><span style="color:#ca60ca">(</span>prefix<span style="color:#ca60ca">)</span>
|
|
<span style="font-weight:bold">let</span> name<span style="color:#ca60ca">:</span> <span style="color:#0057ae">String</span> <span style="color:#ca60ca">=</span> <span style="color:#bf0303">"Kate </span><span style="color:#3daee9">\u{1F3F3}\u{FE0F}\u{200D}\u{1F308}</span><span style="color:#bf0303"> "</span>
|
|
<span style="font-weight:bold">let</span> <span style="font-weight:bold">assert</span> <span style="color:#0057ae">Ok</span><span style="color:#ca60ca">(</span>suffix<span style="color:#ca60ca">)</span> <span style="color:#ca60ca">=</span> <span style="color:#644a9b">get</span><span style="color:#ca60ca">(</span><span style="color:#644a9b">mascots</span><span style="color:#ca60ca">(),</span> <span style="color:#bf0303">"Lucy"</span><span style="color:#ca60ca">)</span>
|
|
io<span style="color:#ca60ca">.</span><span style="color:#644a9b">println</span><span style="color:#ca60ca">(</span>prefix <span style="color:#ca60ca"><></span> name <span style="color:#ca60ca"><></span> suffix<span style="color:#ca60ca">)</span>
|
|
<span style="color:#ca60ca">}</span>
|
|
|
|
<span style="font-weight:bold">const</span> prefix <span style="color:#ca60ca">=</span> <span style="color:#ca60ca"><<</span><span style="color:#bf0303">"Hello"</span><span style="color:#ca60ca">:</span><span style="color:#3daee9">utf8</span><span style="color:#ca60ca">,</span> <span style="color:#b08000">44</span><span style="color:#ca60ca">:</span><span style="color:#3daee9">size</span><span style="color:#ca60ca">(</span><span style="color:#b08000">8</span><span style="color:#ca60ca">),</span> <span style="color:#b08000">32</span><span style="color:#ca60ca">:</span><span style="color:#3daee9">int</span><span style="color:#ca60ca">>></span>
|
|
|
|
<span style="font-weight:bold">fn</span> <span style="color:#644a9b">number</span><span style="color:#ca60ca">(</span>int<span style="color:#ca60ca">)</span> <span style="color:#ca60ca">{</span>
|
|
<span style="font-weight:bold">use</span> <span style="color:#ca60ca"><-</span> bool<span style="color:#ca60ca">.</span><span style="color:#644a9b">guard</span><span style="color:#ca60ca">(</span>when<span style="color:#ca60ca">:</span> int <span style="color:#ca60ca"><</span> <span style="color:#b08000">0</span><span style="color:#ca60ca">,</span> return<span style="color:#ca60ca">:</span> <span style="color:#0057ae">False</span><span style="color:#ca60ca">)</span>
|
|
<span style="font-weight:bold">let</span> dec <span style="color:#ca60ca">=</span> <span style="color:#b08000">123_456_789</span>
|
|
<span style="font-weight:bold">let</span> bin <span style="color:#ca60ca">=</span> <span style="color:#b08000">0b10011011</span>
|
|
<span style="font-weight:bold">let</span> oct <span style="color:#ca60ca">=</span> <span style="color:#b08000">0o1234567</span>
|
|
<span style="font-weight:bold">let</span> hex <span style="color:#ca60ca">=</span> <span style="color:#b08000">0x8337_BEEF</span>
|
|
<span style="font-weight:bold">let</span> _float <span style="color:#ca60ca">=</span> <span style="color:#ca60ca">-</span><span style="color:#b08000">3.1415</span> <span style="color:#ca60ca">*.</span> <span style="color:#b08000">1.0e-4</span>
|
|
<span style="font-weight:bold">let</span> roof <span style="color:#ca60ca">=</span> <span style="color:#ca60ca">{</span> <span style="color:#ca60ca">{</span> dec <span style="color:#ca60ca">+</span> oct <span style="color:#ca60ca">}</span> <span style="color:#ca60ca">*</span> bin <span style="color:#ca60ca">-</span> hex <span style="color:#ca60ca">}</span> <span style="color:#ca60ca">/</span> <span style="color:#b08000">4</span>
|
|
<span style="color:#898887">// 4_246_851_061</span>
|
|
<span style="font-weight:bold">case</span> int <span style="color:#ca60ca">{</span>
|
|
_ <span style="font-weight:bold">if</span> int <span style="color:#ca60ca"><</span> roof <span style="color:#ca60ca">-></span> <span style="color:#0057ae">True</span>
|
|
_ <span style="color:#ca60ca">-></span> <span style="color:#0057ae">False</span>
|
|
<span style="color:#ca60ca">}</span>
|
|
<span style="color:#ca60ca">}</span>
|
|
|
|
<span style="color:#607880">/// Documentation for a custom type with 3 variants</span>
|
|
<span style="font-weight:bold">pub</span> <span style="font-weight:bold">opaque</span> <span style="font-weight:bold">type</span> <span style="color:#0057ae">CustomType</span><span style="color:#ca60ca">(</span>a<span style="color:#ca60ca">)</span> <span style="color:#ca60ca">{</span>
|
|
<span style="color:#607880">/// first variant</span>
|
|
<span style="color:#0057ae">Var1</span><span style="color:#ca60ca">(</span>x<span style="color:#ca60ca">:</span> a<span style="color:#ca60ca">)</span>
|
|
|
|
<span style="color:#607880">/// second variant</span>
|
|
<span style="color:#0057ae">Var2</span><span style="color:#ca60ca">(</span>x<span style="color:#ca60ca">:</span> a<span style="color:#ca60ca">,</span> y<span style="color:#ca60ca">:</span> a<span style="color:#ca60ca">)</span>
|
|
|
|
<span style="color:#607880">/// third variant</span>
|
|
<span style="color:#0057ae">Var3</span><span style="color:#ca60ca">(</span>x<span style="color:#ca60ca">:</span> a<span style="color:#ca60ca">,</span> y<span style="color:#ca60ca">:</span> a<span style="color:#ca60ca">,</span> z<span style="color:#ca60ca">:</span> a<span style="color:#ca60ca">)</span>
|
|
<span style="color:#ca60ca">}</span>
|
|
|
|
<span style="font-weight:bold">pub</span> <span style="font-weight:bold">fn</span> <span style="color:#644a9b">first</span><span style="color:#ca60ca">(</span>ct<span style="color:#ca60ca">:</span> <span style="color:#0057ae">CustomType</span><span style="color:#ca60ca">(</span>a<span style="color:#ca60ca">))</span> <span style="color:#ca60ca">-></span> a <span style="color:#ca60ca">{</span>
|
|
ct<span style="color:#ca60ca">.</span>x
|
|
<span style="color:#ca60ca">}</span>
|
|
|
|
<span style="color:#0057ae">@deprecated</span><span style="color:#ca60ca">(</span><span style="color:#bf0303">"Use last instead"</span><span style="color:#ca60ca">)</span>
|
|
<span style="font-weight:bold">pub</span> <span style="font-weight:bold">fn</span> <span style="color:#644a9b">third</span><span style="color:#ca60ca">(</span>ct<span style="color:#ca60ca">:</span> <span style="color:#0057ae">CustomType</span><span style="color:#ca60ca">(</span>a<span style="color:#ca60ca">))</span> <span style="color:#ca60ca">-></span> a <span style="color:#ca60ca">{</span>
|
|
<span style="color:#898887">// let assert Var3(_, _, z) = ct z</span>
|
|
<span style="font-weight:bold">case</span> ct <span style="color:#ca60ca">{</span>
|
|
<span style="color:#0057ae">Var3</span><span style="color:#ca60ca">(</span>_<span style="color:#ca60ca">,</span> _<span style="color:#ca60ca">,</span> z<span style="color:#ca60ca">)</span> <span style="color:#ca60ca">-></span> z
|
|
_ <span style="color:#ca60ca">-></span> <span style="font-weight:bold">panic</span>
|
|
<span style="color:#ca60ca">}</span>
|
|
<span style="color:#ca60ca">}</span>
|
|
|
|
<span style="font-weight:bold">pub</span> <span style="font-weight:bold">fn</span> <span style="color:#644a9b">last</span><span style="color:#ca60ca">(</span>ct<span style="color:#ca60ca">:</span> <span style="color:#0057ae">CustomType</span><span style="color:#ca60ca">(</span>a<span style="color:#ca60ca">))</span> <span style="color:#ca60ca">-></span> a <span style="color:#ca60ca">{</span>
|
|
<span style="font-weight:bold">case</span> ct <span style="color:#ca60ca">{</span>
|
|
<span style="color:#0057ae">Var1</span><span style="color:#ca60ca">(</span>x<span style="color:#ca60ca">)</span> <span style="color:#ca60ca">-></span> x
|
|
<span style="color:#0057ae">Var2</span><span style="color:#ca60ca">(</span>_<span style="color:#ca60ca">,</span> y<span style="color:#ca60ca">)</span> <span style="color:#ca60ca">-></span> y
|
|
<span style="color:#0057ae">Var3</span><span style="color:#ca60ca">(</span>_<span style="color:#ca60ca">,</span> _<span style="color:#ca60ca">,</span> z<span style="color:#ca60ca">)</span> <span style="color:#ca60ca">-></span> z
|
|
<span style="color:#ca60ca">}</span>
|
|
<span style="color:#ca60ca">}</span>
|
|
|
|
<span style="font-weight:bold">pub</span> <span style="font-weight:bold">type</span> <span style="color:#0057ae">ListError</span> <span style="color:#ca60ca">{</span>
|
|
<span style="color:#0057ae">EmptyList</span>
|
|
<span style="color:#0057ae">ListTooLong</span>
|
|
<span style="color:#ca60ca">}</span>
|
|
|
|
<span style="color:#607880">/// Converts a `List(a)` to a `Result(CustomType(a))`, empty list and list</span>
|
|
<span style="color:#607880">/// longer than 3 will return an error.</span>
|
|
<span style="color:#607880">///</span>
|
|
<span style="color:#607880">/// ## Examples</span>
|
|
<span style="color:#607880">///</span>
|
|
<span style="color:#607880">/// ```gleam</span>
|
|
<span style="color:#607880">/// from_list([1, 2, 3])</span>
|
|
<span style="color:#607880">/// // -> Ok(Var3(1, 2, 3))</span>
|
|
<span style="color:#607880">///</span>
|
|
<span style="color:#607880">/// from_list([1, 2, 3, 4, 5])</span>
|
|
<span style="color:#607880">/// // -> Error(ListTooLong)</span>
|
|
<span style="color:#607880">/// ```</span>
|
|
<span style="color:#607880">///</span>
|
|
<span style="font-weight:bold">pub</span> <span style="font-weight:bold">fn</span> <span style="color:#644a9b">from_list</span><span style="color:#ca60ca">(</span>l<span style="color:#ca60ca">:</span> <span style="color:#0057ae">List</span><span style="color:#ca60ca">(</span>a<span style="color:#ca60ca">))</span> <span style="color:#ca60ca">-></span> <span style="color:#0057ae">Result</span><span style="color:#ca60ca">(</span><span style="color:#0057ae">CustomType</span><span style="color:#ca60ca">(</span>a<span style="color:#ca60ca">),</span> <span style="color:#0057ae">ListError</span><span style="color:#ca60ca">)</span> <span style="color:#ca60ca">{</span>
|
|
<span style="font-weight:bold">case</span> l <span style="color:#ca60ca">{</span>
|
|
<span style="color:#ca60ca">[</span>x<span style="color:#ca60ca">]</span> <span style="color:#ca60ca">-></span> <span style="color:#0057ae">Ok</span><span style="color:#ca60ca">(</span><span style="color:#0057ae">Var1</span><span style="color:#ca60ca">(</span>x<span style="color:#ca60ca">))</span>
|
|
<span style="color:#ca60ca">[</span>x<span style="color:#ca60ca">,</span> y<span style="color:#ca60ca">]</span> <span style="color:#ca60ca">-></span> <span style="color:#0057ae">Ok</span><span style="color:#ca60ca">(</span><span style="color:#0057ae">Var2</span><span style="color:#ca60ca">(</span>x<span style="color:#ca60ca">,</span> y<span style="color:#ca60ca">))</span>
|
|
<span style="color:#ca60ca">[</span>x<span style="color:#ca60ca">,</span> y<span style="color:#ca60ca">,</span> z<span style="color:#ca60ca">]</span> <span style="color:#ca60ca">-></span> <span style="color:#0057ae">Ok</span><span style="color:#ca60ca">(</span><span style="color:#0057ae">Var3</span><span style="color:#ca60ca">(</span>x<span style="color:#ca60ca">,</span> y<span style="color:#ca60ca">,</span> z<span style="color:#ca60ca">))</span>
|
|
<span style="color:#ca60ca">[]</span> <span style="color:#ca60ca">-></span> <span style="color:#0057ae">Error</span><span style="color:#ca60ca">(</span><span style="color:#0057ae">EmptyList</span><span style="color:#ca60ca">)</span>
|
|
_ <span style="color:#ca60ca">-></span> <span style="color:#0057ae">Error</span><span style="color:#ca60ca">(</span><span style="color:#0057ae">ListTooLong</span><span style="color:#ca60ca">)</span>
|
|
<span style="color:#ca60ca">}</span>
|
|
<span style="color:#ca60ca">}</span>
|
|
|
|
<span style="font-weight:bold">fn</span> <span style="color:#644a9b">mascots</span><span style="color:#ca60ca">()</span> <span style="color:#ca60ca">-></span> <span style="color:#0057ae">Dict</span><span style="color:#ca60ca">(</span><span style="color:#0057ae">String</span><span style="color:#ca60ca">,</span> <span style="color:#0057ae">String</span><span style="color:#ca60ca">)</span> <span style="color:#ca60ca">{</span>
|
|
<span style="font-weight:bold">let</span> old_mascots <span style="color:#ca60ca">=</span> dict<span style="color:#ca60ca">.</span><span style="color:#644a9b">from_list</span><span style="color:#ca60ca">([#(</span><span style="color:#bf0303">"Konqi"</span><span style="color:#ca60ca">,</span> <span style="color:#bf0303">"🐉"</span><span style="color:#ca60ca">),</span> <span style="color:#ca60ca">#(</span><span style="color:#bf0303">"Kandalf"</span><span style="color:#ca60ca">,</span> <span style="color:#bf0303">"🧙"</span><span style="color:#ca60ca">)])</span>
|
|
<span style="font-weight:bold">let</span> new_mascots <span style="color:#ca60ca">=</span>
|
|
old_mascots
|
|
<span style="color:#ca60ca">|></span> <span style="color:#644a9b">delete</span><span style="color:#ca60ca">(</span><span style="color:#bf0303">"Kandalf"</span><span style="color:#ca60ca">)</span>
|
|
<span style="color:#ca60ca">|></span> <span style="color:#644a9b">insert</span><span style="color:#ca60ca">(</span><span style="color:#bf0303">"Kate"</span><span style="color:#ca60ca">,</span> <span style="color:#bf0303">"🐦"</span><span style="color:#ca60ca">)</span>
|
|
<span style="color:#ca60ca">|></span> <span style="color:#644a9b">insert</span><span style="color:#ca60ca">(</span><span style="color:#bf0303">"Katie"</span><span style="color:#ca60ca">,</span> <span style="color:#bf0303">"🐉"</span><span style="color:#ca60ca">)</span>
|
|
<span style="color:#ca60ca">|></span> <span style="color:#644a9b">insert</span><span style="color:#ca60ca">(</span><span style="color:#bf0303">"Lucy"</span><span style="color:#ca60ca">,</span> <span style="color:#bf0303">"🌟"</span><span style="color:#ca60ca">)</span>
|
|
new_mascots
|
|
<span style="color:#ca60ca">}</span>
|
|
|
|
<span style="font-weight:bold">type</span> <span style="color:#0057ae">UserId</span> <span style="color:#ca60ca">=</span>
|
|
<span style="color:#0057ae">Int</span>
|
|
|
|
<span style="color:#0057ae">@external</span><span style="color:#ca60ca">(</span>javascript<span style="color:#ca60ca">,</span> <span style="color:#bf0303">"./ffi.mjs"</span><span style="color:#ca60ca">,</span> <span style="color:#bf0303">"call"</span><span style="color:#ca60ca">)</span>
|
|
<span style="font-weight:bold">fn</span> <span style="color:#644a9b">call</span><span style="color:#ca60ca">(</span>id<span style="color:#ca60ca">:</span> <span style="color:#0057ae">UserId</span><span style="color:#ca60ca">)</span> <span style="color:#ca60ca">-></span> <span style="color:#0057ae">String</span> <span style="color:#ca60ca">{</span>
|
|
<span style="font-weight:bold">todo</span> <span style="font-weight:bold">as</span> <span style="color:#bf0303">"call not implemented for this target"</span>
|
|
<span style="color:#ca60ca">}</span>
|
|
<span style="color:#898887">// </span><span style="color:#0057ae;background-color:#e0e9f8">END</span>
|
|
</pre></body></html>
|