Current section
Files
Jump to
Current section
Files
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, 'or'/2, from_constructor0/1, tuple0/0, get_output/1, to_dynamic/1, ok/1, error/1, as_/2, from_constructor_dynamic/2, 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, tuple1/1, tuple2/2, tuple3/3, tuple4/4, tuple5/5, tuple6/6, tuple7/7, tuple8/8, tuple9/9, render/2, can_match_on_multiple/1, list_empty/0, list_first_discard_rest/1, foreign_variant/2, 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(KLP, KLQ) :: {variable, binary(), KLQ} |
{string_literal, binary(), KLQ} |
{string_concat, {binary(), binary()}, KLQ} |
{int_literal, integer(), KLQ} |
{bool_literal, boolean(), KLQ} |
{tuple,
list(pattern(gleamgen@types:dynamic_(), gleamgen@types:dynamic_())),
KLQ} |
{constructor,
{binary(),
list(pattern(gleamgen@types:dynamic_(), gleamgen@types:dynamic_()))},
KLQ} |
{'or', {pattern(KLP, KLQ), pattern(KLP, KLQ)}, KLQ} |
{as,
{pattern(gleamgen@types:dynamic_(), gleamgen@types:dynamic_()),
binary()},
KLQ}.
-file("src/gleamgen/pattern.gleam", 35).
-spec variable(binary()) -> pattern(KLR, gleamgen@expression:expression(KLR)).
variable(Name) ->
{variable, Name, gleamgen@expression:raw(Name)}.
-file("src/gleamgen/pattern.gleam", 39).
-spec string_literal(binary()) -> pattern(any(), nil).
string_literal(Literal) ->
{string_literal, Literal, nil}.
-file("src/gleamgen/pattern.gleam", 43).
-spec discard() -> pattern(any(), nil).
discard() ->
{variable, <<"_"/utf8>>, nil}.
-file("src/gleamgen/pattern.gleam", 47).
-spec named_discard(binary()) -> pattern(any(), nil).
named_discard(Name) ->
{variable, <<"_"/utf8, Name/binary>>, nil}.
-file("src/gleamgen/pattern.gleam", 51).
-spec int_literal(integer()) -> pattern(integer(), nil).
int_literal(Literal) ->
{int_literal, Literal, nil}.
-file("src/gleamgen/pattern.gleam", 55).
-spec bool_literal(boolean()) -> pattern(boolean(), nil).
bool_literal(Literal) ->
{bool_literal, Literal, nil}.
-file("src/gleamgen/pattern.gleam", 81).
?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", 119).
?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(KNE, KNF), pattern(KNE, KNF)) -> pattern(KNE, KNF).
'or'(First, Second) ->
{'or', {First, Second}, erlang:element(3, First)}.
-file("src/gleamgen/pattern.gleam", 149).
-spec from_constructor0(
gleamgen@expression@constructor:constructor(KOM, {}, any())
) -> pattern(KOM, nil).
from_constructor0(Constructor) ->
{constructor, {gleamgen@expression@constructor:name(Constructor), []}, nil}.
-file("src/gleamgen/pattern.gleam", 437).
-spec tuple0() -> pattern({}, nil).
tuple0() ->
{tuple, [], nil}.
-file("src/gleamgen/pattern.gleam", 701).
-spec get_output(pattern(any(), LFZ)) -> LFZ.
get_output(Pattern) ->
erlang:element(3, Pattern).
-file("src/gleamgen/pattern.gleam", 707).
-spec to_dynamic(pattern(any(), any())) -> pattern(gleamgen@types:dynamic_(), gleamgen@types:dynamic_()).
to_dynamic(Type_) ->
gleamgen_ffi:identity(Type_).
-file("src/gleamgen/pattern.gleam", 88).
-spec ok(pattern(KMM, KMN)) -> pattern({ok, KMM} | {error, any()}, KMN).
ok(Ok_pattern) ->
{constructor,
{<<"Ok"/utf8>>,
[begin
_pipe = Ok_pattern,
gleamgen_ffi:identity(_pipe)
end]},
erlang:element(3, Ok_pattern)}.
-file("src/gleamgen/pattern.gleam", 92).
-spec error(pattern(KMV, KMW)) -> pattern({ok, any()} | {error, KMV}, KMW).
error(Err_pattern) ->
{constructor,
{<<"Error"/utf8>>,
[begin
_pipe = Err_pattern,
gleamgen_ffi:identity(_pipe)
end]},
erlang:element(3, Err_pattern)}.
-file("src/gleamgen/pattern.gleam", 126).
-spec as_(pattern(KNM, any()), binary()) -> pattern(KNM, gleamgen@expression:expression(KNM)).
as_(Original, Name) ->
{as,
{begin
_pipe = Original,
gleamgen_ffi:identity(_pipe)
end,
Name},
gleamgen@expression:raw(Name)}.
-file("src/gleamgen/pattern.gleam", 133).
-spec from_constructor_dynamic(
gleamgen@expression@constructor:constructor(any(), any(), any()),
list(pattern(gleamgen@types:dynamic_(), gleamgen@types:dynamic_()))
) -> pattern(any(), list(gleamgen@expression:expression(gleamgen@types: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
)}.
-file("src/gleamgen/pattern.gleam", 155).
-spec from_constructor1(
gleamgen@expression@constructor:constructor(KOT, {{}, KOU}, KOV),
pattern(KOU, KOZ)
) -> pattern(gleamgen@types@custom:custom_type(KOT, KOV), KOZ).
from_constructor1(Constructor, First) ->
{constructor,
{gleamgen@expression@constructor:name(Constructor),
[begin
_pipe = First,
gleamgen_ffi:identity(_pipe)
end]},
erlang:element(3, First)}.
-file("src/gleamgen/pattern.gleam", 168).
-spec from_constructor2(
gleamgen@expression@constructor:constructor(KPG, {{{}, KPH}, KPI}, KPJ),
pattern(KPH, KPN),
pattern(KPI, KPQ)
) -> pattern(gleamgen@types@custom:custom_type(KPG, KPJ), {KPN, KPQ}).
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)}}.
-file("src/gleamgen/pattern.gleam", 182).
-spec from_constructor3(
gleamgen@expression@constructor:constructor(KPX, {{{{}, KPY}, KPZ}, KQA}, any()),
pattern(KPY, KQF),
pattern(KPZ, KQI),
pattern(KQA, KQL)
) -> pattern(KPX, {KQF, KQI, KQL}).
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)}}.
-file("src/gleamgen/pattern.gleam", 202).
-spec from_constructor4(
gleamgen@expression@constructor:constructor(KQQ, {{{{{}, KQR}, KQS}, KQT},
KQU}, any()),
pattern(KQR, KQZ),
pattern(KQS, KRC),
pattern(KQT, KRF),
pattern(KQU, KRI)
) -> pattern(KQQ, {KQZ, KRC, KRF, KRI}).
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)}}.
-file("src/gleamgen/pattern.gleam", 224).
-spec from_constructor5(
gleamgen@expression@constructor:constructor(KRN, {{{{{{}, KRO}, KRP}, KRQ},
KRR},
KRS}, any()),
pattern(KRO, KRX),
pattern(KRP, KSA),
pattern(KRQ, KSD),
pattern(KRR, KSG),
pattern(KRS, KSJ)
) -> pattern(KRN, {KRX, KSA, KSD, KSG, KSJ}).
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)}}.
-file("src/gleamgen/pattern.gleam", 254).
-spec from_constructor6(
gleamgen@expression@constructor:constructor(KSO, {{{{{{{}, KSP}, KSQ}, KSR},
KSS},
KST},
KSU}, any()),
pattern(KSP, KSZ),
pattern(KSQ, KTC),
pattern(KSR, KTF),
pattern(KSS, KTI),
pattern(KST, KTL),
pattern(KSU, KTO)
) -> pattern(KSO, {KSZ, KTC, KTF, KTI, KTL, KTO}).
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)}}.
-file("src/gleamgen/pattern.gleam", 290).
-spec from_constructor7(
gleamgen@expression@constructor:constructor(KTT, {{{{{{{{}, KTU}, KTV}, KTW},
KTX},
KTY},
KTZ},
KUA}, any()),
pattern(KTU, KUF),
pattern(KTV, KUI),
pattern(KTW, KUL),
pattern(KTX, KUO),
pattern(KTY, KUR),
pattern(KTZ, KUU),
pattern(KUA, KUX)
) -> pattern(KTT, {KUF, KUI, KUL, KUO, KUR, KUU, KUX}).
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)}}.
-file("src/gleamgen/pattern.gleam", 329).
-spec from_constructor8(
gleamgen@expression@constructor:constructor(KVC, {{{{{{{{{}, KVD}, KVE},
KVF},
KVG},
KVH},
KVI},
KVJ},
KVK}, any()),
pattern(KVD, KVP),
pattern(KVE, KVS),
pattern(KVF, KVV),
pattern(KVG, KVY),
pattern(KVH, KWB),
pattern(KVI, KWE),
pattern(KVJ, KWH),
pattern(KVK, KWK)
) -> pattern(KVC, {KVP, KVS, KVV, KVY, KWB, KWE, KWH, KWK}).
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)}}.
-file("src/gleamgen/pattern.gleam", 380).
-spec from_constructor9(
gleamgen@expression@constructor:constructor(KWP, {{{{{{{{{{}, KWQ}, KWR},
KWS},
KWT},
KWU},
KWV},
KWW},
KWX},
KWY}, any()),
pattern(KWQ, KXD),
pattern(KWR, KXG),
pattern(KWS, KXJ),
pattern(KWT, KXM),
pattern(KWU, KXP),
pattern(KWV, KXS),
pattern(KWW, KXV),
pattern(KWX, KXY),
pattern(KWY, KYB)
) -> pattern(KWP, {KXD, KXG, KXJ, KXM, KXP, KXS, KXV, KXY, KYB}).
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)}}.
-file("src/gleamgen/pattern.gleam", 441).
-spec tuple1(pattern(KYI, KYJ)) -> pattern({KYI}, {KYJ}).
tuple1(Pattern) ->
{tuple,
[begin
_pipe = Pattern,
gleamgen_ffi:identity(_pipe)
end],
{erlang:element(3, Pattern)}}.
-file("src/gleamgen/pattern.gleam", 450).
-spec tuple2(pattern(KYO, KYP), pattern(KYS, KYT)) -> pattern({KYO, KYS}, {KYP,
KYT}).
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", 460).
-spec tuple3(pattern(KYY, KYZ), pattern(KZC, KZD), pattern(KZG, KZH)) -> pattern({KYY,
KZC,
KZG}, {KYZ, KZD, KZH}).
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", 475).
-spec tuple4(
pattern(KZM, KZN),
pattern(KZQ, KZR),
pattern(KZU, KZV),
pattern(KZY, KZZ)
) -> pattern({KZM, KZQ, KZU, KZY}, {KZN, KZR, KZV, KZZ}).
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", 500).
-spec tuple5(
pattern(LAE, LAF),
pattern(LAI, LAJ),
pattern(LAM, LAN),
pattern(LAQ, LAR),
pattern(LAU, LAV)
) -> pattern({LAE, LAI, LAM, LAQ, LAU}, {LAF, LAJ, LAN, LAR, LAV}).
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", 528).
-spec tuple6(
pattern(LBA, LBB),
pattern(LBE, LBF),
pattern(LBI, LBJ),
pattern(LBM, LBN),
pattern(LBQ, LBR),
pattern(LBU, LBV)
) -> pattern({LBA, LBE, LBI, LBM, LBQ, LBU}, {LBB, LBF, LBJ, LBN, LBR, LBV}).
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", 559).
-spec tuple7(
pattern(LCA, LCB),
pattern(LCE, LCF),
pattern(LCI, LCJ),
pattern(LCM, LCN),
pattern(LCQ, LCR),
pattern(LCU, LCV),
pattern(LCY, LCZ)
) -> pattern({LCA, LCE, LCI, LCM, LCQ, LCU, LCY}, {LCB,
LCF,
LCJ,
LCN,
LCR,
LCV,
LCZ}).
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", 593).
-spec tuple8(
pattern(LDE, LDF),
pattern(LDI, LDJ),
pattern(LDM, LDN),
pattern(LDQ, LDR),
pattern(LDU, LDV),
pattern(LDY, LDZ),
pattern(LEC, LED),
pattern(LEG, LEH)
) -> pattern({LDE, LDI, LDM, LDQ, LDU, LDY, LEC, LEG}, {LDF,
LDJ,
LDN,
LDR,
LDV,
LDZ,
LED,
LEH}).
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", 639).
-spec tuple9(
pattern(LEM, LEN),
pattern(LEQ, LER),
pattern(LEU, LEV),
pattern(LEY, LEZ),
pattern(LFC, LFD),
pattern(LFG, LFH),
pattern(LFK, LFL),
pattern(LFO, LFP),
pattern(LFS, LFT)
) -> pattern({LEM, LEQ, LEU, LEY, LFC, LFG, LFK, LFO, LFS}, {LEN,
LER,
LEV,
LEZ,
LFD,
LFH,
LFL,
LFP,
LFT}).
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", 711).
-spec render(
pattern(gleamgen@types:dynamic_(), gleamgen@types:dynamic_()),
integer()
) -> gleamgen@internal@render:rendered().
render(Pattern, 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, 1),
Rendered_second = render(Second, 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, 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}, _} ->
case Patterns of
[] ->
_pipe@15 = glam@doc:from_string(Name@2),
{render, _pipe@15, {rendered_details, [], {report, [], []}}};
_ ->
{Details, Rendered_patterns} = begin
_pipe@16 = Patterns,
gleam@list:map_fold(
_pipe@16,
{rendered_details, [], {report, [], []}},
fun(Acc, M) ->
Rendered = render(M, 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,
glam@doc:from_string(Name@2)
),
{render, _pipe@19, 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, 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", 814).
-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", 824).
?DOC(" Renders `[]`. List this branch before a catch-all (e.g. `variable`) so the empty case matches first.\n").
-spec list_empty() -> pattern(list(any()), nil).
list_empty() ->
{constructor, {<<"[]"/utf8>>, []}, nil}.
-file("src/gleamgen/pattern.gleam", 829).
?DOC(" Renders `[first, ..]` and binds the head element to `first`.\n").
-spec list_first_discard_rest(binary()) -> pattern(list(LGU), gleamgen@expression:expression(LGU)).
list_first_discard_rest(First) ->
{constructor,
{<<<<"["/utf8, First/binary>>/binary, ", ..]"/utf8>>, []},
gleamgen@expression:raw(First)}.
-file("src/gleamgen/pattern.gleam", 837).
?DOC(
" Match `VariantName(p1, p2, …)` when the variant comes from another module.\n"
" Pass `pattern.variable(\\\"field\\\") |> pattern.to_dynamic` for each field in order.\n"
" The case handler receives each field’s pattern output, typically\n"
" `expression.raw(\\\"field\\\")`, as a list in left-to-right order.\n"
).
-spec foreign_variant(
binary(),
list(pattern(gleamgen@types:dynamic_(), gleamgen@types:dynamic_()))
) -> pattern(gleamgen@types:dynamic_(), list(gleamgen@expression:expression(gleamgen@types:dynamic_()))).
foreign_variant(Variant_name, Field_patterns) ->
{constructor,
{Variant_name,
gleam@list:map(Field_patterns, fun gleamgen_ffi:identity/1)},
gleam@list:filter_map(
Field_patterns,
fun gleamgen_ffi:get_pattern_output/1
)}.
-file("src/gleamgen/pattern.gleam", 848).
?DOC(" `Some(inner)`.\n").
-spec option_some(pattern(LHG, LHH)) -> pattern(gleam@option:option(LHG), LHH).
option_some(Inner) ->
{constructor,
{<<"Some"/utf8>>,
[begin
_pipe = Inner,
gleamgen_ffi:identity(_pipe)
end]},
erlang:element(3, Inner)}.
-file("src/gleamgen/pattern.gleam", 853).
?DOC(" `None`.\n").
-spec option_none() -> pattern(gleam@option:option(any()), nil).
option_none() ->
{constructor, {<<"None"/utf8>>, []}, nil}.