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(LFM, LFN) :: {variable, binary(), LFN} |
{string_literal, binary(), LFN} |
{string_concat, {binary(), binary()}, LFN} |
{int_literal, integer(), LFN} |
{bool_literal, boolean(), LFN} |
{tuple,
list(pattern(gleamgen@type_:dynamic_(), gleamgen@type_:dynamic_())),
LFN} |
{constructor,
{binary(),
list(pattern(gleamgen@type_:dynamic_(), gleamgen@type_:dynamic_()))},
LFN,
gleam@option:option(gleamgen@internal@import_reference:import_reference())} |
{'or', {pattern(LFM, LFN), pattern(LFM, LFN)}, LFN} |
{as,
{pattern(gleamgen@type_:dynamic_(), gleamgen@type_:dynamic_()),
binary()},
LFN}.
-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(LFO, gleamgen@expression:expression(LFO)).
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(LGJ, LGK)) -> pattern({ok, LGJ} | {error, any()}, LGK).
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(LGS, LGT)) -> pattern({ok, any()} | {error, LGS}, LGT).
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(LHB, LHC), pattern(LHB, LHC)) -> pattern(LHB, LHC).
'or'(First, Second) ->
{'or', {First, Second}, erlang:element(3, First)}.
-file("src/gleamgen/pattern.gleam", 142).
-spec as_(pattern(LHJ, any()), binary()) -> pattern(LHJ, gleamgen@expression:expression(LHJ)).
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(LIJ, {}, any())
) -> pattern(LIJ, 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(LIQ, {{}, LIR}, LIS),
pattern(LIR, LIW)
) -> pattern(gleamgen@type_@custom:custom_type(LIQ, LIS), LIW).
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(LJD, {{{}, LJE}, LJF}, LJG),
pattern(LJE, LJK),
pattern(LJF, LJN)
) -> pattern(gleamgen@type_@custom:custom_type(LJD, LJG), {LJK, LJN}).
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(LJU, {{{{}, LJV}, LJW}, LJX}, any()),
pattern(LJV, LKC),
pattern(LJW, LKF),
pattern(LJX, LKI)
) -> pattern(LJU, {LKC, LKF, LKI}).
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(LKN, {{{{{}, LKO}, LKP}, LKQ},
LKR}, any()),
pattern(LKO, LKW),
pattern(LKP, LKZ),
pattern(LKQ, LLC),
pattern(LKR, LLF)
) -> pattern(LKN, {LKW, LKZ, LLC, LLF}).
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(LLK, {{{{{{}, LLL}, LLM}, LLN},
LLO},
LLP}, any()),
pattern(LLL, LLU),
pattern(LLM, LLX),
pattern(LLN, LMA),
pattern(LLO, LMD),
pattern(LLP, LMG)
) -> pattern(LLK, {LLU, LLX, LMA, LMD, LMG}).
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(LML, {{{{{{{}, LMM}, LMN}, LMO},
LMP},
LMQ},
LMR}, any()),
pattern(LMM, LMW),
pattern(LMN, LMZ),
pattern(LMO, LNC),
pattern(LMP, LNF),
pattern(LMQ, LNI),
pattern(LMR, LNL)
) -> pattern(LML, {LMW, LMZ, LNC, LNF, LNI, LNL}).
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(LNQ, {{{{{{{{}, LNR}, LNS}, LNT},
LNU},
LNV},
LNW},
LNX}, any()),
pattern(LNR, LOC),
pattern(LNS, LOF),
pattern(LNT, LOI),
pattern(LNU, LOL),
pattern(LNV, LOO),
pattern(LNW, LOR),
pattern(LNX, LOU)
) -> pattern(LNQ, {LOC, LOF, LOI, LOL, LOO, LOR, LOU}).
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(LOZ, {{{{{{{{{}, LPA}, LPB},
LPC},
LPD},
LPE},
LPF},
LPG},
LPH}, any()),
pattern(LPA, LPM),
pattern(LPB, LPP),
pattern(LPC, LPS),
pattern(LPD, LPV),
pattern(LPE, LPY),
pattern(LPF, LQB),
pattern(LPG, LQE),
pattern(LPH, LQH)
) -> pattern(LOZ, {LPM, LPP, LPS, LPV, LPY, LQB, LQE, LQH}).
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(LQM, {{{{{{{{{{}, LQN}, LQO},
LQP},
LQQ},
LQR},
LQS},
LQT},
LQU},
LQV}, any()),
pattern(LQN, LRA),
pattern(LQO, LRD),
pattern(LQP, LRG),
pattern(LQQ, LRJ),
pattern(LQR, LRM),
pattern(LQS, LRP),
pattern(LQT, LRS),
pattern(LQU, LRV),
pattern(LQV, LRY)
) -> pattern(LQM, {LRA, LRD, LRG, LRJ, LRM, LRP, LRS, LRV, LRY}).
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(LSF, LSG)) -> pattern({LSF}, {LSG}).
tuple1(Pattern) ->
{tuple,
[begin
_pipe = Pattern,
gleamgen_ffi:identity(_pipe)
end],
{erlang:element(3, Pattern)}}.
-file("src/gleamgen/pattern.gleam", 505).
-spec tuple2(pattern(LSL, LSM), pattern(LSP, LSQ)) -> pattern({LSL, LSP}, {LSM,
LSQ}).
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(LSV, LSW), pattern(LSZ, LTA), pattern(LTD, LTE)) -> pattern({LSV,
LSZ,
LTD}, {LSW, LTA, LTE}).
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(LTJ, LTK),
pattern(LTN, LTO),
pattern(LTR, LTS),
pattern(LTV, LTW)
) -> pattern({LTJ, LTN, LTR, LTV}, {LTK, LTO, LTS, LTW}).
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(LUB, LUC),
pattern(LUF, LUG),
pattern(LUJ, LUK),
pattern(LUN, LUO),
pattern(LUR, LUS)
) -> pattern({LUB, LUF, LUJ, LUN, LUR}, {LUC, LUG, LUK, LUO, LUS}).
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(LUX, LUY),
pattern(LVB, LVC),
pattern(LVF, LVG),
pattern(LVJ, LVK),
pattern(LVN, LVO),
pattern(LVR, LVS)
) -> pattern({LUX, LVB, LVF, LVJ, LVN, LVR}, {LUY, LVC, LVG, LVK, LVO, LVS}).
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(LVX, LVY),
pattern(LWB, LWC),
pattern(LWF, LWG),
pattern(LWJ, LWK),
pattern(LWN, LWO),
pattern(LWR, LWS),
pattern(LWV, LWW)
) -> pattern({LVX, LWB, LWF, LWJ, LWN, LWR, LWV}, {LVY,
LWC,
LWG,
LWK,
LWO,
LWS,
LWW}).
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(LXB, LXC),
pattern(LXF, LXG),
pattern(LXJ, LXK),
pattern(LXN, LXO),
pattern(LXR, LXS),
pattern(LXV, LXW),
pattern(LXZ, LYA),
pattern(LYD, LYE)
) -> pattern({LXB, LXF, LXJ, LXN, LXR, LXV, LXZ, LYD}, {LXC,
LXG,
LXK,
LXO,
LXS,
LXW,
LYA,
LYE}).
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(LYJ, LYK),
pattern(LYN, LYO),
pattern(LYR, LYS),
pattern(LYV, LYW),
pattern(LYZ, LZA),
pattern(LZD, LZE),
pattern(LZH, LZI),
pattern(LZL, LZM),
pattern(LZP, LZQ)
) -> pattern({LYJ, LYN, LYR, LYV, LYZ, LZD, LZH, LZL, LZP}, {LYK,
LYO,
LYS,
LYW,
LZA,
LZE,
LZI,
LZM,
LZQ}).
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(), LZW)) -> LZW.
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(MAR), gleamgen@expression:expression(MAR)).
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(MAW, MAX)) -> pattern(gleam@option:option(MAW), MAX).
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>>]
)}}.