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