-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}.