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 Dark)"/>
|
|
</head><body style="background-color:#232629;color:#cfcfc2"><pre>
|
|
<span style="color:#a43340">//// Syntax test file for Gleam</span>
|
|
<span style="color:#a43340">////</span>
|
|
<span style="color:#a43340">//// This is a dummy example file and should not be taken as a reference of</span>
|
|
<span style="color:#a43340">//// well written Gleam, but it does compile correctly appart from an error</span>
|
|
<span style="color:#a43340">//// for the absent file "./ffi.mjs" and some warnings.</span>
|
|
<span style="color:#a43340">////</span>
|
|
<span style="color:#a43340">////</span>
|
|
<span style="color:#a43340">////</span>
|
|
<span style="color:#a43340">//// ## Top module documentation comment with markdown formatting</span>
|
|
<span style="color:#a43340">////</span>
|
|
<span style="color:#a43340">//// Formats: _italic text_, **bold text**, `monospace text`, ~~strikeout~~</span>
|
|
<span style="color:#a43340">////</span>
|
|
<span style="color:#a43340">//// Bullet list:</span>
|
|
<span style="color:#a43340">////</span>
|
|
<span style="color:#a43340">//// - item 1</span>
|
|
<span style="color:#a43340">//// - item 2</span>
|
|
<span style="color:#a43340">////</span>
|
|
<span style="color:#a43340">//// Numbered list:</span>
|
|
<span style="color:#a43340">////</span>
|
|
<span style="color:#a43340">//// 1. item 1</span>
|
|
<span style="color:#a43340">//// 2. item 2</span>
|
|
<span style="color:#a43340">////</span>
|
|
<span style="color:#a43340">//// [link](https://example.com)</span>
|
|
|
|
<span style="color:#7a7c7d">// </span><span style="color:#3f8058;font-style:italic">SPDX-FileCopyrightText:</span><span style="color:#7a7c7d"> 2024 Louis Guichard <glpda+kde@pm.me></span>
|
|
<span style="color:#7a7c7d">// </span><span style="color:#3f8058;font-style:italic">SPDX-License-Identifier:</span><span style="color:#3f8058;font-style:italic"> </span><span style="color:#3f8058;font-style:italic">MIT</span>
|
|
|
|
<span style="font-weight:bold">import</span> <span style="color:#27ae60">gleam/bit_array</span> <span style="font-weight:bold">as</span> <span style="color:#27ae60">bit_string</span>
|
|
<span style="font-weight:bold">import</span> <span style="color:#27ae60">gleam/bool</span>
|
|
<span style="font-weight:bold">import</span> <span style="color:#27ae60">gleam/dict</span><span style="color:#3f8058">.{</span><span style="font-weight:bold">type</span> <span style="color:#2980b9">Dict</span><span style="color:#3f8058">,</span> delete<span style="color:#3f8058">,</span> get<span style="color:#3f8058">,</span> insert<span style="color:#3f8058">}</span>
|
|
<span style="font-weight:bold">import</span> <span style="color:#27ae60">gleam/io</span>
|
|
|
|
<span style="color:#7a7c7d">// </span><span style="color:#2980b9;background-color:#153042">BEGIN</span>
|
|
|
|
<span style="font-weight:bold">pub</span> <span style="font-weight:bold">fn</span> <span style="color:#8e44ad">main</span><span style="color:#3f8058">()</span> <span style="color:#3f8058">{</span>
|
|
<span style="font-weight:bold">let</span> <span style="color:#fdbc4b;font-weight:bold">assert</span> <span style="color:#2980b9">Ok</span><span style="color:#3f8058">(</span>prefix<span style="color:#3f8058">)</span> <span style="color:#3f8058">=</span> bit_string<span style="color:#3f8058">.</span><span style="color:#8e44ad">to_string</span><span style="color:#3f8058">(</span>prefix<span style="color:#3f8058">)</span>
|
|
<span style="font-weight:bold">let</span> name<span style="color:#3f8058">:</span> <span style="color:#2980b9">String</span> <span style="color:#3f8058">=</span> <span style="color:#f44f4f">"Kate </span><span style="color:#3daee9">\u{1F3F3}\u{FE0F}\u{200D}\u{1F308}</span><span style="color:#f44f4f"> "</span>
|
|
<span style="font-weight:bold">let</span> <span style="color:#fdbc4b;font-weight:bold">assert</span> <span style="color:#2980b9">Ok</span><span style="color:#3f8058">(</span>suffix<span style="color:#3f8058">)</span> <span style="color:#3f8058">=</span> <span style="color:#8e44ad">get</span><span style="color:#3f8058">(</span><span style="color:#8e44ad">mascots</span><span style="color:#3f8058">(),</span> <span style="color:#f44f4f">"Lucy"</span><span style="color:#3f8058">)</span>
|
|
io<span style="color:#3f8058">.</span><span style="color:#8e44ad">println</span><span style="color:#3f8058">(</span>prefix <span style="color:#3f8058"><></span> name <span style="color:#3f8058"><></span> suffix<span style="color:#3f8058">)</span>
|
|
<span style="color:#3f8058">}</span>
|
|
|
|
<span style="font-weight:bold">const</span> prefix <span style="color:#3f8058">=</span> <span style="color:#3f8058"><<</span><span style="color:#f44f4f">"Hello"</span><span style="color:#3f8058">:</span><span style="color:#3daee9">utf8</span><span style="color:#3f8058">,</span> <span style="color:#f67400">44</span><span style="color:#3f8058">:</span><span style="color:#3daee9">size</span><span style="color:#3f8058">(</span><span style="color:#f67400">8</span><span style="color:#3f8058">),</span> <span style="color:#f67400">32</span><span style="color:#3f8058">:</span><span style="color:#3daee9">int</span><span style="color:#3f8058">>></span>
|
|
|
|
<span style="font-weight:bold">fn</span> <span style="color:#8e44ad">number</span><span style="color:#3f8058">(</span>int<span style="color:#3f8058">)</span> <span style="color:#3f8058">{</span>
|
|
<span style="font-weight:bold">use</span> <span style="color:#3f8058"><-</span> bool<span style="color:#3f8058">.</span><span style="color:#8e44ad">guard</span><span style="color:#3f8058">(</span>when<span style="color:#3f8058">:</span> int <span style="color:#3f8058"><</span> <span style="color:#f67400">0</span><span style="color:#3f8058">,</span> return<span style="color:#3f8058">:</span> <span style="color:#2980b9">False</span><span style="color:#3f8058">)</span>
|
|
<span style="font-weight:bold">let</span> dec <span style="color:#3f8058">=</span> <span style="color:#f67400">123_456_789</span>
|
|
<span style="font-weight:bold">let</span> bin <span style="color:#3f8058">=</span> <span style="color:#f67400">0b10011011</span>
|
|
<span style="font-weight:bold">let</span> oct <span style="color:#3f8058">=</span> <span style="color:#f67400">0o1234567</span>
|
|
<span style="font-weight:bold">let</span> hex <span style="color:#3f8058">=</span> <span style="color:#f67400">0x8337_BEEF</span>
|
|
<span style="font-weight:bold">let</span> _float <span style="color:#3f8058">=</span> <span style="color:#3f8058">-</span><span style="color:#f67400">3.1415</span> <span style="color:#3f8058">*.</span> <span style="color:#f67400">1.0e-4</span>
|
|
<span style="font-weight:bold">let</span> roof <span style="color:#3f8058">=</span> <span style="color:#3f8058">{</span> <span style="color:#3f8058">{</span> dec <span style="color:#3f8058">+</span> oct <span style="color:#3f8058">}</span> <span style="color:#3f8058">*</span> bin <span style="color:#3f8058">-</span> hex <span style="color:#3f8058">}</span> <span style="color:#3f8058">/</span> <span style="color:#f67400">4</span>
|
|
<span style="color:#7a7c7d">// 4_246_851_061</span>
|
|
<span style="font-weight:bold">case</span> int <span style="color:#3f8058">{</span>
|
|
_ <span style="font-weight:bold">if</span> int <span style="color:#3f8058"><</span> roof <span style="color:#3f8058">-></span> <span style="color:#2980b9">True</span>
|
|
_ <span style="color:#3f8058">-></span> <span style="color:#2980b9">False</span>
|
|
<span style="color:#3f8058">}</span>
|
|
<span style="color:#3f8058">}</span>
|
|
|
|
<span style="color:#a43340">/// 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:#2980b9">CustomType</span><span style="color:#3f8058">(</span>a<span style="color:#3f8058">)</span> <span style="color:#3f8058">{</span>
|
|
<span style="color:#a43340">/// first variant</span>
|
|
<span style="color:#2980b9">Var1</span><span style="color:#3f8058">(</span>x<span style="color:#3f8058">:</span> a<span style="color:#3f8058">)</span>
|
|
|
|
<span style="color:#a43340">/// second variant</span>
|
|
<span style="color:#2980b9">Var2</span><span style="color:#3f8058">(</span>x<span style="color:#3f8058">:</span> a<span style="color:#3f8058">,</span> y<span style="color:#3f8058">:</span> a<span style="color:#3f8058">)</span>
|
|
|
|
<span style="color:#a43340">/// third variant</span>
|
|
<span style="color:#2980b9">Var3</span><span style="color:#3f8058">(</span>x<span style="color:#3f8058">:</span> a<span style="color:#3f8058">,</span> y<span style="color:#3f8058">:</span> a<span style="color:#3f8058">,</span> z<span style="color:#3f8058">:</span> a<span style="color:#3f8058">)</span>
|
|
<span style="color:#3f8058">}</span>
|
|
|
|
<span style="font-weight:bold">pub</span> <span style="font-weight:bold">fn</span> <span style="color:#8e44ad">first</span><span style="color:#3f8058">(</span>ct<span style="color:#3f8058">:</span> <span style="color:#2980b9">CustomType</span><span style="color:#3f8058">(</span>a<span style="color:#3f8058">))</span> <span style="color:#3f8058">-></span> a <span style="color:#3f8058">{</span>
|
|
ct<span style="color:#3f8058">.</span>x
|
|
<span style="color:#3f8058">}</span>
|
|
|
|
<span style="color:#2980b9">@deprecated</span><span style="color:#3f8058">(</span><span style="color:#f44f4f">"Use last instead"</span><span style="color:#3f8058">)</span>
|
|
<span style="font-weight:bold">pub</span> <span style="font-weight:bold">fn</span> <span style="color:#8e44ad">third</span><span style="color:#3f8058">(</span>ct<span style="color:#3f8058">:</span> <span style="color:#2980b9">CustomType</span><span style="color:#3f8058">(</span>a<span style="color:#3f8058">))</span> <span style="color:#3f8058">-></span> a <span style="color:#3f8058">{</span>
|
|
<span style="color:#7a7c7d">// let assert Var3(_, _, z) = ct z</span>
|
|
<span style="font-weight:bold">case</span> ct <span style="color:#3f8058">{</span>
|
|
<span style="color:#2980b9">Var3</span><span style="color:#3f8058">(</span>_<span style="color:#3f8058">,</span> _<span style="color:#3f8058">,</span> z<span style="color:#3f8058">)</span> <span style="color:#3f8058">-></span> z
|
|
_ <span style="color:#3f8058">-></span> <span style="color:#fdbc4b;font-weight:bold">panic</span>
|
|
<span style="color:#3f8058">}</span>
|
|
<span style="color:#3f8058">}</span>
|
|
|
|
<span style="font-weight:bold">pub</span> <span style="font-weight:bold">fn</span> <span style="color:#8e44ad">last</span><span style="color:#3f8058">(</span>ct<span style="color:#3f8058">:</span> <span style="color:#2980b9">CustomType</span><span style="color:#3f8058">(</span>a<span style="color:#3f8058">))</span> <span style="color:#3f8058">-></span> a <span style="color:#3f8058">{</span>
|
|
<span style="font-weight:bold">case</span> ct <span style="color:#3f8058">{</span>
|
|
<span style="color:#2980b9">Var1</span><span style="color:#3f8058">(</span>x<span style="color:#3f8058">)</span> <span style="color:#3f8058">-></span> x
|
|
<span style="color:#2980b9">Var2</span><span style="color:#3f8058">(</span>_<span style="color:#3f8058">,</span> y<span style="color:#3f8058">)</span> <span style="color:#3f8058">-></span> y
|
|
<span style="color:#2980b9">Var3</span><span style="color:#3f8058">(</span>_<span style="color:#3f8058">,</span> _<span style="color:#3f8058">,</span> z<span style="color:#3f8058">)</span> <span style="color:#3f8058">-></span> z
|
|
<span style="color:#3f8058">}</span>
|
|
<span style="color:#3f8058">}</span>
|
|
|
|
<span style="font-weight:bold">pub</span> <span style="font-weight:bold">type</span> <span style="color:#2980b9">ListError</span> <span style="color:#3f8058">{</span>
|
|
<span style="color:#2980b9">EmptyList</span>
|
|
<span style="color:#2980b9">ListTooLong</span>
|
|
<span style="color:#3f8058">}</span>
|
|
|
|
<span style="color:#a43340">/// Converts a `List(a)` to a `Result(CustomType(a))`, empty list and list</span>
|
|
<span style="color:#a43340">/// longer than 3 will return an error.</span>
|
|
<span style="color:#a43340">///</span>
|
|
<span style="color:#a43340">/// ## Examples</span>
|
|
<span style="color:#a43340">///</span>
|
|
<span style="color:#a43340">/// ```gleam</span>
|
|
<span style="color:#a43340">/// from_list([1, 2, 3])</span>
|
|
<span style="color:#a43340">/// // -> Ok(Var3(1, 2, 3))</span>
|
|
<span style="color:#a43340">///</span>
|
|
<span style="color:#a43340">/// from_list([1, 2, 3, 4, 5])</span>
|
|
<span style="color:#a43340">/// // -> Error(ListTooLong)</span>
|
|
<span style="color:#a43340">/// ```</span>
|
|
<span style="color:#a43340">///</span>
|
|
<span style="font-weight:bold">pub</span> <span style="font-weight:bold">fn</span> <span style="color:#8e44ad">from_list</span><span style="color:#3f8058">(</span>l<span style="color:#3f8058">:</span> <span style="color:#2980b9">List</span><span style="color:#3f8058">(</span>a<span style="color:#3f8058">))</span> <span style="color:#3f8058">-></span> <span style="color:#2980b9">Result</span><span style="color:#3f8058">(</span><span style="color:#2980b9">CustomType</span><span style="color:#3f8058">(</span>a<span style="color:#3f8058">),</span> <span style="color:#2980b9">ListError</span><span style="color:#3f8058">)</span> <span style="color:#3f8058">{</span>
|
|
<span style="font-weight:bold">case</span> l <span style="color:#3f8058">{</span>
|
|
<span style="color:#3f8058">[</span>x<span style="color:#3f8058">]</span> <span style="color:#3f8058">-></span> <span style="color:#2980b9">Ok</span><span style="color:#3f8058">(</span><span style="color:#2980b9">Var1</span><span style="color:#3f8058">(</span>x<span style="color:#3f8058">))</span>
|
|
<span style="color:#3f8058">[</span>x<span style="color:#3f8058">,</span> y<span style="color:#3f8058">]</span> <span style="color:#3f8058">-></span> <span style="color:#2980b9">Ok</span><span style="color:#3f8058">(</span><span style="color:#2980b9">Var2</span><span style="color:#3f8058">(</span>x<span style="color:#3f8058">,</span> y<span style="color:#3f8058">))</span>
|
|
<span style="color:#3f8058">[</span>x<span style="color:#3f8058">,</span> y<span style="color:#3f8058">,</span> z<span style="color:#3f8058">]</span> <span style="color:#3f8058">-></span> <span style="color:#2980b9">Ok</span><span style="color:#3f8058">(</span><span style="color:#2980b9">Var3</span><span style="color:#3f8058">(</span>x<span style="color:#3f8058">,</span> y<span style="color:#3f8058">,</span> z<span style="color:#3f8058">))</span>
|
|
<span style="color:#3f8058">[]</span> <span style="color:#3f8058">-></span> <span style="color:#2980b9">Error</span><span style="color:#3f8058">(</span><span style="color:#2980b9">EmptyList</span><span style="color:#3f8058">)</span>
|
|
_ <span style="color:#3f8058">-></span> <span style="color:#2980b9">Error</span><span style="color:#3f8058">(</span><span style="color:#2980b9">ListTooLong</span><span style="color:#3f8058">)</span>
|
|
<span style="color:#3f8058">}</span>
|
|
<span style="color:#3f8058">}</span>
|
|
|
|
<span style="font-weight:bold">fn</span> <span style="color:#8e44ad">mascots</span><span style="color:#3f8058">()</span> <span style="color:#3f8058">-></span> <span style="color:#2980b9">Dict</span><span style="color:#3f8058">(</span><span style="color:#2980b9">String</span><span style="color:#3f8058">,</span> <span style="color:#2980b9">String</span><span style="color:#3f8058">)</span> <span style="color:#3f8058">{</span>
|
|
<span style="font-weight:bold">let</span> old_mascots <span style="color:#3f8058">=</span> dict<span style="color:#3f8058">.</span><span style="color:#8e44ad">from_list</span><span style="color:#3f8058">([#(</span><span style="color:#f44f4f">"Konqi"</span><span style="color:#3f8058">,</span> <span style="color:#f44f4f">"🐉"</span><span style="color:#3f8058">),</span> <span style="color:#3f8058">#(</span><span style="color:#f44f4f">"Kandalf"</span><span style="color:#3f8058">,</span> <span style="color:#f44f4f">"🧙"</span><span style="color:#3f8058">)])</span>
|
|
<span style="font-weight:bold">let</span> new_mascots <span style="color:#3f8058">=</span>
|
|
old_mascots
|
|
<span style="color:#3f8058">|></span> <span style="color:#8e44ad">delete</span><span style="color:#3f8058">(</span><span style="color:#f44f4f">"Kandalf"</span><span style="color:#3f8058">)</span>
|
|
<span style="color:#3f8058">|></span> <span style="color:#8e44ad">insert</span><span style="color:#3f8058">(</span><span style="color:#f44f4f">"Kate"</span><span style="color:#3f8058">,</span> <span style="color:#f44f4f">"🐦"</span><span style="color:#3f8058">)</span>
|
|
<span style="color:#3f8058">|></span> <span style="color:#8e44ad">insert</span><span style="color:#3f8058">(</span><span style="color:#f44f4f">"Katie"</span><span style="color:#3f8058">,</span> <span style="color:#f44f4f">"🐉"</span><span style="color:#3f8058">)</span>
|
|
<span style="color:#3f8058">|></span> <span style="color:#8e44ad">insert</span><span style="color:#3f8058">(</span><span style="color:#f44f4f">"Lucy"</span><span style="color:#3f8058">,</span> <span style="color:#f44f4f">"🌟"</span><span style="color:#3f8058">)</span>
|
|
new_mascots
|
|
<span style="color:#3f8058">}</span>
|
|
|
|
<span style="font-weight:bold">type</span> <span style="color:#2980b9">UserId</span> <span style="color:#3f8058">=</span>
|
|
<span style="color:#2980b9">Int</span>
|
|
|
|
<span style="color:#2980b9">@external</span><span style="color:#3f8058">(</span>javascript<span style="color:#3f8058">,</span> <span style="color:#f44f4f">"./ffi.mjs"</span><span style="color:#3f8058">,</span> <span style="color:#f44f4f">"call"</span><span style="color:#3f8058">)</span>
|
|
<span style="font-weight:bold">fn</span> <span style="color:#8e44ad">call</span><span style="color:#3f8058">(</span>id<span style="color:#3f8058">:</span> <span style="color:#2980b9">UserId</span><span style="color:#3f8058">)</span> <span style="color:#3f8058">-></span> <span style="color:#2980b9">String</span> <span style="color:#3f8058">{</span>
|
|
<span style="color:#fdbc4b;font-weight:bold">todo</span> <span style="font-weight:bold">as</span> <span style="color:#f44f4f">"call not implemented for this target"</span>
|
|
<span style="color:#3f8058">}</span>
|
|
<span style="color:#7a7c7d">// </span><span style="color:#2980b9;background-color:#153042">END</span>
|
|
</pre></body></html>
|