Current section

Files

Jump to
gleamgen src gleamgen@pattern.erl
Raw

src/gleamgen@pattern.erl

-module(gleamgen@pattern).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gleamgen/pattern.gleam").
-export([variable/1, string_literal/1, discard/0, named_discard/1, int_literal/1, bool_literal/1, concat_string/2, to_dynamic/1, ok/1, error/1, 'or'/2, as_/2, from_constructor_dynamic/2, from_constructor0/1, from_constructor1/2, from_constructor2/3, from_constructor3/4, from_constructor4/5, from_constructor5/6, from_constructor6/7, from_constructor7/8, from_constructor8/9, from_constructor9/10, tuple0/0, tuple1/1, tuple2/2, tuple3/3, tuple4/4, tuple5/5, tuple6/6, tuple7/7, tuple8/8, tuple9/9, get_output/1, render/3, can_match_on_multiple/1, list_empty/0, list_first_discard_rest/1, option_some/1, option_none/0]).
-export_type([pattern/2]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-opaque pattern(LFL, LFM) :: {variable, binary(), LFM} |
{string_literal, binary(), LFM} |
{string_concat, {binary(), binary()}, LFM} |
{int_literal, integer(), LFM} |
{bool_literal, boolean(), LFM} |
{tuple,
list(pattern(gleamgen@type_:dynamic_(), gleamgen@type_:dynamic_())),
LFM} |
{constructor,
{binary(),
list(pattern(gleamgen@type_:dynamic_(), gleamgen@type_:dynamic_()))},
LFM,
gleam@option:option(gleamgen@internal@import_reference:import_reference())} |
{'or', {pattern(LFL, LFM), pattern(LFL, LFM)}, LFM} |
{as,
{pattern(gleamgen@type_:dynamic_(), gleamgen@type_:dynamic_()),
binary()},
LFM}.
-file("src/gleamgen/pattern.gleam", 39).
?DOC(
" Match any value with a variable name.\n"
" If you do not care about the contents, use `discard`\n"
).
-spec variable(binary()) -> pattern(LFN, gleamgen@expression:expression(LFN)).
variable(Name) ->
{variable, Name, gleamgen@expression:raw(Name)}.
-file("src/gleamgen/pattern.gleam", 44).
?DOC(" Match a string literal\n").
-spec string_literal(binary()) -> pattern(any(), nil).
string_literal(Literal) ->
{string_literal, Literal, nil}.
-file("src/gleamgen/pattern.gleam", 51).
?DOC(
" Match and discard any value (Generates `_`).\n"
" If you want to name the discarded value, use `named_discard`\n"
" If you want to use the discarded value in the output, use `variable`\n"
).
-spec discard() -> pattern(any(), nil).
discard() ->
{variable, <<"_"/utf8>>, nil}.
-file("src/gleamgen/pattern.gleam", 56).
?DOC(" Match and discard any value (Generates `_name`)\n").
-spec named_discard(binary()) -> pattern(any(), nil).
named_discard(Name) ->
{variable, <<"_"/utf8, Name/binary>>, nil}.
-file("src/gleamgen/pattern.gleam", 61).
?DOC(" Match an integer literal\n").
-spec int_literal(integer()) -> pattern(integer(), nil).
int_literal(Literal) ->
{int_literal, Literal, nil}.
-file("src/gleamgen/pattern.gleam", 66).
?DOC(" Match a boolean literal\n").
-spec bool_literal(boolean()) -> pattern(boolean(), nil).
bool_literal(Literal) ->
{bool_literal, Literal, nil}.
-file("src/gleamgen/pattern.gleam", 92).
?DOC(
" Match a string that starts with `initial`\n"
" ```gleam\n"
" case_.new(expression.string(\"I love gleam\"))\n"
" |> case_.with_pattern(\n"
" pattern.concat_string(starting: \"I love \", variable: \"thing\"),\n"
" fn(thing) {\n"
" expression.string(\"I love \")\n"
" |> expression.concat_string(thing)\n"
" |> expression.concat_string(expression.string(\" too\"))\n"
" },\n"
" )\n"
" |> case_.with_pattern(pattern.variable(\"_\"), fn(_) {\n"
" expression.string(\"interesting\")\n"
" })\n"
" |> case_.build_expression()\n"
" |> expression.render(render.default_context())\n"
" |> render.to_string()\n"
" // -> \"case \\\"I love gleam\\\" {\n"
" \\\"I love \\\" <> thing -> \\\"I love \\\" <> thing <> \\\" too\\\"\n"
" _ -> \\\"Interesting\\\"\n"
" }\"\n"
" ```\n"
).
-spec concat_string(binary(), binary()) -> pattern(binary(), gleamgen@expression:expression(any())).
concat_string(Initial, Variable) ->
{string_concat, {Initial, Variable}, gleamgen@expression:raw(Variable)}.
-file("src/gleamgen/pattern.gleam", 762).
-spec to_dynamic(pattern(any(), any())) -> pattern(gleamgen@type_:dynamic_(), gleamgen@type_:dynamic_()).
to_dynamic(Type_) ->
gleamgen_ffi:identity(Type_).
-file("src/gleamgen/pattern.gleam", 99).
-spec ok(pattern(LGI, LGJ)) -> pattern({ok, LGI} | {error, any()}, LGJ).
ok(Ok_pattern) ->
{constructor,
{<<"Ok"/utf8>>,
[begin
_pipe = Ok_pattern,
gleamgen_ffi:identity(_pipe)
end]},
erlang:element(3, Ok_pattern),
none}.
-file("src/gleamgen/pattern.gleam", 107).
-spec error(pattern(LGR, LGS)) -> pattern({ok, any()} | {error, LGR}, LGS).
error(Err_pattern) ->
{constructor,
{<<"Error"/utf8>>,
[begin
_pipe = Err_pattern,
gleamgen_ffi:identity(_pipe)
end]},
erlang:element(3, Err_pattern),
none}.
-file("src/gleamgen/pattern.gleam", 135).
?DOC(
" Use either of the two patterns\n"
" ```gleam\n"
" case_.new(expression.string(\"hello\"))\n"
" |> case_.with_pattern(\n"
" pattern.or(pattern.string_literal(\"hello\"), pattern.string_literal(\"hi\")),\n"
" fn(_) { expression.string(\"world\") },\n"
" )\n"
" |> case_.with_pattern(pattern.variable(\"v\"), fn(v) {\n"
" expression.concat_string(v, expression.string(\" world\"))\n"
" })\n"
" |> case_.build_expression()\n"
" |> expression.render(render.default_context())\n"
" |> render.to_string()\n"
" // -> \"case \\\"hello\\\" {\n"
" \\\"hello\\\" | \\\"hi\\\" -> \\\"world\\\"\n"
" v -> v <> \\\" world\\\"\n"
" }\",\n"
" ```\n"
).
-spec 'or'(pattern(LHA, LHB), pattern(LHA, LHB)) -> pattern(LHA, LHB).
'or'(First, Second) ->
{'or', {First, Second}, erlang:element(3, First)}.
-file("src/gleamgen/pattern.gleam", 142).
-spec as_(pattern(LHI, any()), binary()) -> pattern(LHI, gleamgen@expression:expression(LHI)).
as_(Original, Name) ->
{as,
{begin
_pipe = Original,
gleamgen_ffi:identity(_pipe)
end,
Name},
gleamgen@expression:raw(Name)}.
-file("src/gleamgen/pattern.gleam", 149).
-spec from_constructor_dynamic(
gleamgen@expression@constructor:constructor(any(), any(), any()),
list(pattern(gleamgen@type_:dynamic_(), gleamgen@type_:dynamic_()))
) -> pattern(any(), list(gleamgen@expression:expression(gleamgen@type_:dynamic_()))).
from_constructor_dynamic(Constructor, Constructors) ->
{constructor,
{gleamgen@expression@constructor:name(Constructor),
gleam@list:map(Constructors, fun gleamgen_ffi:identity/1)},
gleam@list:filter_map(
Constructors,
fun gleamgen_ffi:get_pattern_output/1
),
none}.
-file("src/gleamgen/pattern.gleam", 170).
?DOC(" See `from_constructor1`.\n").
-spec from_constructor0(
gleamgen@expression@constructor:constructor(LII, {}, any())
) -> pattern(LII, nil).
from_constructor0(Constructor) ->
{constructor,
{gleamgen@expression@constructor:name(Constructor), []},
nil,
none}.
-file("src/gleamgen/pattern.gleam", 201).
?DOC(
" Create a pattern that matches a custom constructor with one argument.\n"
" Use `from_constructor_dynamic` for ad dynamic number of arguments.\n"
" ```gleam\n"
" let animals =\n"
" custom.new(ExampleAnimal)\n"
" |> custom.with_variant(fn(_) {\n"
" variant.new(\"Dog\")\n"
" |> variant.with_argument(option.Some(\"bones\"), type_.int)\n"
" })\n"
" \n"
" use animal_type, dog_constructor <- module.with_custom_type1(\n"
" definition.new(\"Animal\") |> definition.with_publicity(True),\n"
" animals,\n"
" )\n"
" ...\n"
" pattern.from_constructor1(\n"
" dog_constructor,\n"
" pattern.variable(\"bones\"),\n"
" ) |> pattern.render(context, 1)\n"
" // -> \"Dog(bones)\"\n"
" ```\n"
).
-spec from_constructor1(
gleamgen@expression@constructor:constructor(LIP, {{}, LIQ}, LIR),
pattern(LIQ, LIV)
) -> pattern(gleamgen@type_@custom:custom_type(LIP, LIR), LIV).
from_constructor1(Constructor, First) ->
{constructor,
{gleamgen@expression@constructor:name(Constructor),
[begin
_pipe = First,
gleamgen_ffi:identity(_pipe)
end]},
erlang:element(3, First),
none}.
-file("src/gleamgen/pattern.gleam", 215).
-spec from_constructor2(
gleamgen@expression@constructor:constructor(LJC, {{{}, LJD}, LJE}, LJF),
pattern(LJD, LJJ),
pattern(LJE, LJM)
) -> pattern(gleamgen@type_@custom:custom_type(LJC, LJF), {LJJ, LJM}).
from_constructor2(Constructor, First, Second) ->
{constructor,
{gleamgen@expression@constructor:name(Constructor),
[begin
_pipe = First,
gleamgen_ffi:identity(_pipe)
end,
begin
_pipe@1 = Second,
gleamgen_ffi:identity(_pipe@1)
end]},
{erlang:element(3, First), erlang:element(3, Second)},
none}.
-file("src/gleamgen/pattern.gleam", 230).
-spec from_constructor3(
gleamgen@expression@constructor:constructor(LJT, {{{{}, LJU}, LJV}, LJW}, any()),
pattern(LJU, LKB),
pattern(LJV, LKE),
pattern(LJW, LKH)
) -> pattern(LJT, {LKB, LKE, LKH}).
from_constructor3(Constructor, First, Second, Third) ->
{constructor,
{gleamgen@expression@constructor:name(Constructor),
[begin
_pipe = First,
gleamgen_ffi:identity(_pipe)
end,
begin
_pipe@1 = Second,
gleamgen_ffi:identity(_pipe@1)
end,
begin
_pipe@2 = Third,
gleamgen_ffi:identity(_pipe@2)
end]},
{erlang:element(3, First),
erlang:element(3, Second),
erlang:element(3, Third)},
none}.
-file("src/gleamgen/pattern.gleam", 251).
-spec from_constructor4(
gleamgen@expression@constructor:constructor(LKM, {{{{{}, LKN}, LKO}, LKP},
LKQ}, any()),
pattern(LKN, LKV),
pattern(LKO, LKY),
pattern(LKP, LLB),
pattern(LKQ, LLE)
) -> pattern(LKM, {LKV, LKY, LLB, LLE}).
from_constructor4(Constructor, First, Second, Third, Fourth) ->
{constructor,
{gleamgen@expression@constructor:name(Constructor),
[begin
_pipe = First,
gleamgen_ffi:identity(_pipe)
end,
begin
_pipe@1 = Second,
gleamgen_ffi:identity(_pipe@1)
end,
begin
_pipe@2 = Third,
gleamgen_ffi:identity(_pipe@2)
end,
begin
_pipe@3 = Fourth,
gleamgen_ffi:identity(_pipe@3)
end]},
{erlang:element(3, First),
erlang:element(3, Second),
erlang:element(3, Third),
erlang:element(3, Fourth)},
none}.
-file("src/gleamgen/pattern.gleam", 274).
-spec from_constructor5(
gleamgen@expression@constructor:constructor(LLJ, {{{{{{}, LLK}, LLL}, LLM},
LLN},
LLO}, any()),
pattern(LLK, LLT),
pattern(LLL, LLW),
pattern(LLM, LLZ),
pattern(LLN, LMC),
pattern(LLO, LMF)
) -> pattern(LLJ, {LLT, LLW, LLZ, LMC, LMF}).
from_constructor5(Constructor, First, Second, Third, Fourth, Fifth) ->
{constructor,
{gleamgen@expression@constructor:name(Constructor),
[begin
_pipe = First,
gleamgen_ffi:identity(_pipe)
end,
begin
_pipe@1 = Second,
gleamgen_ffi:identity(_pipe@1)
end,
begin
_pipe@2 = Third,
gleamgen_ffi:identity(_pipe@2)
end,
begin
_pipe@3 = Fourth,
gleamgen_ffi:identity(_pipe@3)
end,
begin
_pipe@4 = Fifth,
gleamgen_ffi:identity(_pipe@4)
end]},
{erlang:element(3, First),
erlang:element(3, Second),
erlang:element(3, Third),
erlang:element(3, Fourth),
erlang:element(3, Fifth)},
none}.
-file("src/gleamgen/pattern.gleam", 305).
-spec from_constructor6(
gleamgen@expression@constructor:constructor(LMK, {{{{{{{}, LML}, LMM}, LMN},
LMO},
LMP},
LMQ}, any()),
pattern(LML, LMV),
pattern(LMM, LMY),
pattern(LMN, LNB),
pattern(LMO, LNE),
pattern(LMP, LNH),
pattern(LMQ, LNK)
) -> pattern(LMK, {LMV, LMY, LNB, LNE, LNH, LNK}).
from_constructor6(Constructor, First, Second, Third, Fourth, Fifth, Sixth) ->
{constructor,
{gleamgen@expression@constructor:name(Constructor),
[begin
_pipe = First,
gleamgen_ffi:identity(_pipe)
end,
begin
_pipe@1 = Second,
gleamgen_ffi:identity(_pipe@1)
end,
begin
_pipe@2 = Third,
gleamgen_ffi:identity(_pipe@2)
end,
begin
_pipe@3 = Fourth,
gleamgen_ffi:identity(_pipe@3)
end,
begin
_pipe@4 = Fifth,
gleamgen_ffi:identity(_pipe@4)
end,
begin
_pipe@5 = Sixth,
gleamgen_ffi:identity(_pipe@5)
end]},
{erlang:element(3, First),
erlang:element(3, Second),
erlang:element(3, Third),
erlang:element(3, Fourth),
erlang:element(3, Fifth),
erlang:element(3, Sixth)},
none}.
-file("src/gleamgen/pattern.gleam", 342).
-spec from_constructor7(
gleamgen@expression@constructor:constructor(LNP, {{{{{{{{}, LNQ}, LNR}, LNS},
LNT},
LNU},
LNV},
LNW}, any()),
pattern(LNQ, LOB),
pattern(LNR, LOE),
pattern(LNS, LOH),
pattern(LNT, LOK),
pattern(LNU, LON),
pattern(LNV, LOQ),
pattern(LNW, LOT)
) -> pattern(LNP, {LOB, LOE, LOH, LOK, LON, LOQ, LOT}).
from_constructor7(
Constructor,
First,
Second,
Third,
Fourth,
Fifth,
Sixth,
Seventh
) ->
{constructor,
{gleamgen@expression@constructor:name(Constructor),
[begin
_pipe = First,
gleamgen_ffi:identity(_pipe)
end,
begin
_pipe@1 = Second,
gleamgen_ffi:identity(_pipe@1)
end,
begin
_pipe@2 = Third,
gleamgen_ffi:identity(_pipe@2)
end,
begin
_pipe@3 = Fourth,
gleamgen_ffi:identity(_pipe@3)
end,
begin
_pipe@4 = Fifth,
gleamgen_ffi:identity(_pipe@4)
end,
begin
_pipe@5 = Sixth,
gleamgen_ffi:identity(_pipe@5)
end,
begin
_pipe@6 = Seventh,
gleamgen_ffi:identity(_pipe@6)
end]},
{erlang:element(3, First),
erlang:element(3, Second),
erlang:element(3, Third),
erlang:element(3, Fourth),
erlang:element(3, Fifth),
erlang:element(3, Sixth),
erlang:element(3, Seventh)},
none}.
-file("src/gleamgen/pattern.gleam", 382).
-spec from_constructor8(
gleamgen@expression@constructor:constructor(LOY, {{{{{{{{{}, LOZ}, LPA},
LPB},
LPC},
LPD},
LPE},
LPF},
LPG}, any()),
pattern(LOZ, LPL),
pattern(LPA, LPO),
pattern(LPB, LPR),
pattern(LPC, LPU),
pattern(LPD, LPX),
pattern(LPE, LQA),
pattern(LPF, LQD),
pattern(LPG, LQG)
) -> pattern(LOY, {LPL, LPO, LPR, LPU, LPX, LQA, LQD, LQG}).
from_constructor8(
Constructor,
First,
Second,
Third,
Fourth,
Fifth,
Sixth,
Seventh,
Eighth
) ->
{constructor,
{gleamgen@expression@constructor:name(Constructor),
[begin
_pipe = First,
gleamgen_ffi:identity(_pipe)
end,
begin
_pipe@1 = Second,
gleamgen_ffi:identity(_pipe@1)
end,
begin
_pipe@2 = Third,
gleamgen_ffi:identity(_pipe@2)
end,
begin
_pipe@3 = Fourth,
gleamgen_ffi:identity(_pipe@3)
end,
begin
_pipe@4 = Fifth,
gleamgen_ffi:identity(_pipe@4)
end,
begin
_pipe@5 = Sixth,
gleamgen_ffi:identity(_pipe@5)
end,
begin
_pipe@6 = Seventh,
gleamgen_ffi:identity(_pipe@6)
end,
begin
_pipe@7 = Eighth,
gleamgen_ffi:identity(_pipe@7)
end]},
{erlang:element(3, First),
erlang:element(3, Second),
erlang:element(3, Third),
erlang:element(3, Fourth),
erlang:element(3, Fifth),
erlang:element(3, Sixth),
erlang:element(3, Seventh),
erlang:element(3, Eighth)},
none}.
-file("src/gleamgen/pattern.gleam", 434).
-spec from_constructor9(
gleamgen@expression@constructor:constructor(LQL, {{{{{{{{{{}, LQM}, LQN},
LQO},
LQP},
LQQ},
LQR},
LQS},
LQT},
LQU}, any()),
pattern(LQM, LQZ),
pattern(LQN, LRC),
pattern(LQO, LRF),
pattern(LQP, LRI),
pattern(LQQ, LRL),
pattern(LQR, LRO),
pattern(LQS, LRR),
pattern(LQT, LRU),
pattern(LQU, LRX)
) -> pattern(LQL, {LQZ, LRC, LRF, LRI, LRL, LRO, LRR, LRU, LRX}).
from_constructor9(
Constructor,
First,
Second,
Third,
Fourth,
Fifth,
Sixth,
Seventh,
Eighth,
Ninth
) ->
{constructor,
{gleamgen@expression@constructor:name(Constructor),
[begin
_pipe = First,
gleamgen_ffi:identity(_pipe)
end,
begin
_pipe@1 = Second,
gleamgen_ffi:identity(_pipe@1)
end,
begin
_pipe@2 = Third,
gleamgen_ffi:identity(_pipe@2)
end,
begin
_pipe@3 = Fourth,
gleamgen_ffi:identity(_pipe@3)
end,
begin
_pipe@4 = Fifth,
gleamgen_ffi:identity(_pipe@4)
end,
begin
_pipe@5 = Sixth,
gleamgen_ffi:identity(_pipe@5)
end,
begin
_pipe@6 = Seventh,
gleamgen_ffi:identity(_pipe@6)
end,
begin
_pipe@7 = Eighth,
gleamgen_ffi:identity(_pipe@7)
end,
begin
_pipe@8 = Ninth,
gleamgen_ffi:identity(_pipe@8)
end]},
{erlang:element(3, First),
erlang:element(3, Second),
erlang:element(3, Third),
erlang:element(3, Fourth),
erlang:element(3, Fifth),
erlang:element(3, Sixth),
erlang:element(3, Seventh),
erlang:element(3, Eighth),
erlang:element(3, Ninth)},
none}.
-file("src/gleamgen/pattern.gleam", 492).
-spec tuple0() -> pattern({}, nil).
tuple0() ->
{tuple, [], nil}.
-file("src/gleamgen/pattern.gleam", 496).
-spec tuple1(pattern(LSE, LSF)) -> pattern({LSE}, {LSF}).
tuple1(Pattern) ->
{tuple,
[begin
_pipe = Pattern,
gleamgen_ffi:identity(_pipe)
end],
{erlang:element(3, Pattern)}}.
-file("src/gleamgen/pattern.gleam", 505).
-spec tuple2(pattern(LSK, LSL), pattern(LSO, LSP)) -> pattern({LSK, LSO}, {LSL,
LSP}).
tuple2(Pattern1, Pattern2) ->
{tuple,
[begin
_pipe = Pattern1,
gleamgen_ffi:identity(_pipe)
end,
begin
_pipe@1 = Pattern2,
gleamgen_ffi:identity(_pipe@1)
end],
{erlang:element(3, Pattern1), erlang:element(3, Pattern2)}}.
-file("src/gleamgen/pattern.gleam", 515).
-spec tuple3(pattern(LSU, LSV), pattern(LSY, LSZ), pattern(LTC, LTD)) -> pattern({LSU,
LSY,
LTC}, {LSV, LSZ, LTD}).
tuple3(Pattern1, Pattern2, Pattern3) ->
{tuple,
[begin
_pipe = Pattern1,
gleamgen_ffi:identity(_pipe)
end,
begin
_pipe@1 = Pattern2,
gleamgen_ffi:identity(_pipe@1)
end,
begin
_pipe@2 = Pattern3,
gleamgen_ffi:identity(_pipe@2)
end],
{erlang:element(3, Pattern1),
erlang:element(3, Pattern2),
erlang:element(3, Pattern3)}}.
-file("src/gleamgen/pattern.gleam", 530).
-spec tuple4(
pattern(LTI, LTJ),
pattern(LTM, LTN),
pattern(LTQ, LTR),
pattern(LTU, LTV)
) -> pattern({LTI, LTM, LTQ, LTU}, {LTJ, LTN, LTR, LTV}).
tuple4(Pattern1, Pattern2, Pattern3, Pattern4) ->
{tuple,
[begin
_pipe = Pattern1,
gleamgen_ffi:identity(_pipe)
end,
begin
_pipe@1 = Pattern2,
gleamgen_ffi:identity(_pipe@1)
end,
begin
_pipe@2 = Pattern3,
gleamgen_ffi:identity(_pipe@2)
end,
begin
_pipe@3 = Pattern4,
gleamgen_ffi:identity(_pipe@3)
end],
{erlang:element(3, Pattern1),
erlang:element(3, Pattern2),
erlang:element(3, Pattern3),
erlang:element(3, Pattern4)}}.
-file("src/gleamgen/pattern.gleam", 555).
-spec tuple5(
pattern(LUA, LUB),
pattern(LUE, LUF),
pattern(LUI, LUJ),
pattern(LUM, LUN),
pattern(LUQ, LUR)
) -> pattern({LUA, LUE, LUI, LUM, LUQ}, {LUB, LUF, LUJ, LUN, LUR}).
tuple5(Pattern1, Pattern2, Pattern3, Pattern4, Pattern5) ->
{tuple,
[begin
_pipe = Pattern1,
gleamgen_ffi:identity(_pipe)
end,
begin
_pipe@1 = Pattern2,
gleamgen_ffi:identity(_pipe@1)
end,
begin
_pipe@2 = Pattern3,
gleamgen_ffi:identity(_pipe@2)
end,
begin
_pipe@3 = Pattern4,
gleamgen_ffi:identity(_pipe@3)
end,
begin
_pipe@4 = Pattern5,
gleamgen_ffi:identity(_pipe@4)
end],
{erlang:element(3, Pattern1),
erlang:element(3, Pattern2),
erlang:element(3, Pattern3),
erlang:element(3, Pattern4),
erlang:element(3, Pattern5)}}.
-file("src/gleamgen/pattern.gleam", 583).
-spec tuple6(
pattern(LUW, LUX),
pattern(LVA, LVB),
pattern(LVE, LVF),
pattern(LVI, LVJ),
pattern(LVM, LVN),
pattern(LVQ, LVR)
) -> pattern({LUW, LVA, LVE, LVI, LVM, LVQ}, {LUX, LVB, LVF, LVJ, LVN, LVR}).
tuple6(Pattern1, Pattern2, Pattern3, Pattern4, Pattern5, Pattern6) ->
{tuple,
[begin
_pipe = Pattern1,
gleamgen_ffi:identity(_pipe)
end,
begin
_pipe@1 = Pattern2,
gleamgen_ffi:identity(_pipe@1)
end,
begin
_pipe@2 = Pattern3,
gleamgen_ffi:identity(_pipe@2)
end,
begin
_pipe@3 = Pattern4,
gleamgen_ffi:identity(_pipe@3)
end,
begin
_pipe@4 = Pattern5,
gleamgen_ffi:identity(_pipe@4)
end,
begin
_pipe@5 = Pattern6,
gleamgen_ffi:identity(_pipe@5)
end],
{erlang:element(3, Pattern1),
erlang:element(3, Pattern2),
erlang:element(3, Pattern3),
erlang:element(3, Pattern4),
erlang:element(3, Pattern5),
erlang:element(3, Pattern6)}}.
-file("src/gleamgen/pattern.gleam", 614).
-spec tuple7(
pattern(LVW, LVX),
pattern(LWA, LWB),
pattern(LWE, LWF),
pattern(LWI, LWJ),
pattern(LWM, LWN),
pattern(LWQ, LWR),
pattern(LWU, LWV)
) -> pattern({LVW, LWA, LWE, LWI, LWM, LWQ, LWU}, {LVX,
LWB,
LWF,
LWJ,
LWN,
LWR,
LWV}).
tuple7(Pattern1, Pattern2, Pattern3, Pattern4, Pattern5, Pattern6, Pattern7) ->
{tuple,
[begin
_pipe = Pattern1,
gleamgen_ffi:identity(_pipe)
end,
begin
_pipe@1 = Pattern2,
gleamgen_ffi:identity(_pipe@1)
end,
begin
_pipe@2 = Pattern3,
gleamgen_ffi:identity(_pipe@2)
end,
begin
_pipe@3 = Pattern4,
gleamgen_ffi:identity(_pipe@3)
end,
begin
_pipe@4 = Pattern5,
gleamgen_ffi:identity(_pipe@4)
end,
begin
_pipe@5 = Pattern6,
gleamgen_ffi:identity(_pipe@5)
end,
begin
_pipe@6 = Pattern7,
gleamgen_ffi:identity(_pipe@6)
end],
{erlang:element(3, Pattern1),
erlang:element(3, Pattern2),
erlang:element(3, Pattern3),
erlang:element(3, Pattern4),
erlang:element(3, Pattern5),
erlang:element(3, Pattern6),
erlang:element(3, Pattern7)}}.
-file("src/gleamgen/pattern.gleam", 648).
-spec tuple8(
pattern(LXA, LXB),
pattern(LXE, LXF),
pattern(LXI, LXJ),
pattern(LXM, LXN),
pattern(LXQ, LXR),
pattern(LXU, LXV),
pattern(LXY, LXZ),
pattern(LYC, LYD)
) -> pattern({LXA, LXE, LXI, LXM, LXQ, LXU, LXY, LYC}, {LXB,
LXF,
LXJ,
LXN,
LXR,
LXV,
LXZ,
LYD}).
tuple8(
Pattern1,
Pattern2,
Pattern3,
Pattern4,
Pattern5,
Pattern6,
Pattern7,
Pattern8
) ->
{tuple,
[begin
_pipe = Pattern1,
gleamgen_ffi:identity(_pipe)
end,
begin
_pipe@1 = Pattern2,
gleamgen_ffi:identity(_pipe@1)
end,
begin
_pipe@2 = Pattern3,
gleamgen_ffi:identity(_pipe@2)
end,
begin
_pipe@3 = Pattern4,
gleamgen_ffi:identity(_pipe@3)
end,
begin
_pipe@4 = Pattern5,
gleamgen_ffi:identity(_pipe@4)
end,
begin
_pipe@5 = Pattern6,
gleamgen_ffi:identity(_pipe@5)
end,
begin
_pipe@6 = Pattern7,
gleamgen_ffi:identity(_pipe@6)
end,
begin
_pipe@7 = Pattern8,
gleamgen_ffi:identity(_pipe@7)
end],
{erlang:element(3, Pattern1),
erlang:element(3, Pattern2),
erlang:element(3, Pattern3),
erlang:element(3, Pattern4),
erlang:element(3, Pattern5),
erlang:element(3, Pattern6),
erlang:element(3, Pattern7),
erlang:element(3, Pattern8)}}.
-file("src/gleamgen/pattern.gleam", 694).
-spec tuple9(
pattern(LYI, LYJ),
pattern(LYM, LYN),
pattern(LYQ, LYR),
pattern(LYU, LYV),
pattern(LYY, LYZ),
pattern(LZC, LZD),
pattern(LZG, LZH),
pattern(LZK, LZL),
pattern(LZO, LZP)
) -> pattern({LYI, LYM, LYQ, LYU, LYY, LZC, LZG, LZK, LZO}, {LYJ,
LYN,
LYR,
LYV,
LYZ,
LZD,
LZH,
LZL,
LZP}).
tuple9(
Pattern1,
Pattern2,
Pattern3,
Pattern4,
Pattern5,
Pattern6,
Pattern7,
Pattern8,
Pattern9
) ->
{tuple,
[begin
_pipe = Pattern1,
gleamgen_ffi:identity(_pipe)
end,
begin
_pipe@1 = Pattern2,
gleamgen_ffi:identity(_pipe@1)
end,
begin
_pipe@2 = Pattern3,
gleamgen_ffi:identity(_pipe@2)
end,
begin
_pipe@3 = Pattern4,
gleamgen_ffi:identity(_pipe@3)
end,
begin
_pipe@4 = Pattern5,
gleamgen_ffi:identity(_pipe@4)
end,
begin
_pipe@5 = Pattern6,
gleamgen_ffi:identity(_pipe@5)
end,
begin
_pipe@6 = Pattern7,
gleamgen_ffi:identity(_pipe@6)
end,
begin
_pipe@7 = Pattern8,
gleamgen_ffi:identity(_pipe@7)
end,
begin
_pipe@8 = Pattern9,
gleamgen_ffi:identity(_pipe@8)
end],
{erlang:element(3, Pattern1),
erlang:element(3, Pattern2),
erlang:element(3, Pattern3),
erlang:element(3, Pattern4),
erlang:element(3, Pattern5),
erlang:element(3, Pattern6),
erlang:element(3, Pattern7),
erlang:element(3, Pattern8),
erlang:element(3, Pattern9)}}.
-file("src/gleamgen/pattern.gleam", 756).
-spec get_output(pattern(any(), LZV)) -> LZV.
get_output(Pattern) ->
erlang:element(3, Pattern).
-file("src/gleamgen/pattern.gleam", 766).
-spec render(
pattern(gleamgen@type_:dynamic_(), gleamgen@type_:dynamic_()),
gleamgen@internal@render:context(),
integer()
) -> gleamgen@internal@render:rendered().
render(Pattern, Context, Number_of_subjects) ->
case Pattern of
{variable, Name, _} ->
_pipe = gleam@list:repeat(
glam@doc:from_string(Name),
Number_of_subjects
),
_pipe@1 = glam@doc:concat_join(
_pipe,
[glam@doc:from_string(<<","/utf8>>),
{break, <<" "/utf8>>, <<""/utf8>>}]
),
{render, _pipe@1, {rendered_details, [], [], {report, [], []}}};
{string_literal, Literal, _} ->
_pipe@2 = gleamgen@internal@render:escape_string(Literal),
_pipe@3 = glam@doc:from_string(_pipe@2),
{render, _pipe@3, {rendered_details, [], [], {report, [], []}}};
{string_concat, {Literal@1, Variable}, _} ->
_pipe@4 = gleamgen@internal@render:escape_string(Literal@1),
_pipe@5 = glam@doc:from_string(_pipe@4),
_pipe@6 = glam@doc:append(
_pipe@5,
glam@doc:concat(
[{break, <<" "/utf8>>, <<""/utf8>>},
glam@doc:from_string(<<"<>"/utf8>>),
{break, <<" "/utf8>>, <<""/utf8>>},
glam@doc:from_string(Variable)]
)
),
_pipe@7 = glam@doc:group(_pipe@6),
{render, _pipe@7, {rendered_details, [], [], {report, [], []}}};
{int_literal, Literal@2, _} ->
_pipe@8 = Literal@2,
_pipe@9 = erlang:integer_to_binary(_pipe@8),
_pipe@10 = glam@doc:from_string(_pipe@9),
{render, _pipe@10, {rendered_details, [], [], {report, [], []}}};
{bool_literal, true, _} ->
_pipe@11 = glam@doc:from_string(<<"True"/utf8>>),
{render, _pipe@11, {rendered_details, [], [], {report, [], []}}};
{bool_literal, false, _} ->
_pipe@12 = glam@doc:from_string(<<"False"/utf8>>),
{render, _pipe@12, {rendered_details, [], [], {report, [], []}}};
{'or', {First, Second}, _} ->
Rendered_first = render(First, Context, 1),
Rendered_second = render(Second, Context, 1),
_pipe@13 = glam@doc:concat(
[erlang:element(2, Rendered_first),
{break, <<" "/utf8>>, <<""/utf8>>},
glam@doc:from_string(<<"|"/utf8>>),
{break, <<" "/utf8>>, <<""/utf8>>},
erlang:element(2, Rendered_second)]
),
{render,
_pipe@13,
gleamgen@internal@render:merge_details(
erlang:element(3, Rendered_first),
erlang:element(3, Rendered_second)
)};
{as, {Original, Name@1}, _} ->
Original@1 = render(Original, Context, 1),
_pipe@14 = glam@doc:concat(
[erlang:element(2, Original@1),
{break, <<" "/utf8>>, <<""/utf8>>},
glam@doc:from_string(<<"as"/utf8>>),
{break, <<" "/utf8>>, <<""/utf8>>},
glam@doc:from_string(Name@1)]
),
{render, _pipe@14, erlang:element(3, Original@1)};
{constructor, {Name@2, Patterns}, _, Module} ->
{Constructor_doc@1, Module_details} = case Module of
none ->
{glam@doc:from_string(Name@2),
{rendered_details, [], [], {report, [], []}}};
{some, Module@1} ->
Module_to_use = gleamgen@internal@render:get_import_from_context(
Context,
Module@1
),
Constructor_doc = gleamgen@internal@import_reference:get_reference(
Module_to_use,
Name@2
),
{Constructor_doc,
gleamgen@internal@render:add_import_to_details(
{rendered_details, [], [], {report, [], []}},
Module@1
)}
end,
case Patterns of
[] ->
_pipe@15 = Constructor_doc@1,
{render, _pipe@15, Module_details};
_ ->
{Details, Rendered_patterns} = begin
_pipe@16 = Patterns,
gleam@list:map_fold(
_pipe@16,
{rendered_details, [], [], {report, [], []}},
fun(Acc, M) ->
Rendered = render(M, Context, 1),
{gleamgen@internal@render:merge_details(
Acc,
erlang:element(3, Rendered)
),
erlang:element(2, Rendered)}
end
)
end,
_pipe@17 = Rendered_patterns,
_pipe@18 = gleamgen@internal@render:pretty_list(_pipe@17),
_pipe@19 = glam@doc:prepend(_pipe@18, Constructor_doc@1),
{render,
_pipe@19,
gleamgen@internal@render:merge_details(
Details,
Module_details
)}
end;
{tuple, Patterns@1, _} ->
{Details@1, Rendered_patterns@1} = begin
_pipe@20 = Patterns@1,
gleam@list:map_fold(
_pipe@20,
{rendered_details, [], [], {report, [], []}},
fun(Acc@1, M@1) ->
Rendered@1 = render(M@1, Context, 1),
{gleamgen@internal@render:merge_details(
Acc@1,
erlang:element(3, Rendered@1)
),
erlang:element(2, Rendered@1)}
end
)
end,
_pipe@24 = case Number_of_subjects of
1 ->
_pipe@21 = Rendered_patterns@1,
_pipe@22 = gleamgen@internal@render:pretty_list(_pipe@21),
glam@doc:prepend(
_pipe@22,
glam@doc:from_string(<<"#"/utf8>>)
);
_ ->
_pipe@23 = Rendered_patterns@1,
glam@doc:concat_join(
_pipe@23,
[glam@doc:from_string(<<","/utf8>>),
{break, <<" "/utf8>>, <<""/utf8>>}]
)
end,
{render, _pipe@24, Details@1}
end.
-file("src/gleamgen/pattern.gleam", 887).
?DOC(false).
-spec can_match_on_multiple(pattern(any(), any())) -> boolean().
can_match_on_multiple(Pattern) ->
case Pattern of
{tuple, _, _} ->
true;
{variable, <<"_"/utf8>>, _} ->
true;
_ ->
false
end.
-file("src/gleamgen/pattern.gleam", 897).
?DOC(" Renders `[]`.\n").
-spec list_empty() -> pattern(list(any()), nil).
list_empty() ->
{constructor, {<<"[]"/utf8>>, []}, nil, none}.
-file("src/gleamgen/pattern.gleam", 902).
?DOC(" Renders `[first, ..]` and binds the head element to `first`.\n").
-spec list_first_discard_rest(binary()) -> pattern(list(MAQ), gleamgen@expression:expression(MAQ)).
list_first_discard_rest(First) ->
{constructor,
{<<<<"["/utf8, First/binary>>/binary, ", ..]"/utf8>>, []},
gleamgen@expression:raw(First),
none}.
-file("src/gleamgen/pattern.gleam", 912).
?DOC(
" Matches with `option.Some(inner)`. If the option module is already imported, this uses the existing \n"
" import options (ie qualified or unqualified and aliases). Otherwise, it adds the import.\n"
).
-spec option_some(pattern(MAV, MAW)) -> pattern(gleam@option:option(MAV), MAW).
option_some(Inner) ->
{constructor,
{<<"Some"/utf8>>,
[begin
_pipe = Inner,
gleamgen_ffi:identity(_pipe)
end]},
erlang:element(3, Inner),
{some,
gleamgen@internal@import_reference:new_implied_reference(
[<<"gleam"/utf8>>, <<"option"/utf8>>]
)}}.
-file("src/gleamgen/pattern.gleam", 924).
?DOC(
" Matches with `None`. If the option module is already imported, this uses the existing \n"
" import options (ie qualified or unqualified and aliases). Otherwise, it adds the import.\n"
).
-spec option_none() -> pattern(gleam@option:option(any()), nil).
option_none() ->
{constructor,
{<<"None"/utf8>>, []},
nil,
{some,
gleamgen@internal@import_reference:new_implied_reference(
[<<"gleam"/utf8>>, <<"option"/utf8>>]
)}}.