-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/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(LFQ, LFR) :: {variable, binary(), LFR} | {string_literal, binary(), LFR} | {string_concat, {binary(), binary()}, LFR} | {int_literal, integer(), LFR} | {bool_literal, boolean(), LFR} | {tuple, list(pattern(gleamgen@type_:dynamic_(), gleamgen@type_:dynamic_())), LFR} | {constructor, {binary(), list(pattern(gleamgen@type_:dynamic_(), gleamgen@type_:dynamic_()))}, LFR, gleam@option:option(gleamgen@internal@import_reference:import_reference())} | {'or', {pattern(LFQ, LFR), pattern(LFQ, LFR)}, LFR} | {as, {pattern(gleamgen@type_:dynamic_(), gleamgen@type_:dynamic_()), binary()}, LFR}. -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(LFS, gleamgen@expression:expression(LFS)). 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", 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(LHF, LHG), pattern(LHF, LHG)) -> pattern(LHF, LHG). 'or'(First, Second) -> {'or', {First, Second}, erlang:element(3, First)}. -file("src/gleamgen/pattern.gleam", 170). ?DOC(" See `from_constructor1`.\n"). -spec from_constructor0( gleamgen@expression@constructor:constructor(LIN, {}, any()) ) -> pattern(LIN, nil). from_constructor0(Constructor) -> {constructor, {gleamgen@expression@constructor:name(Constructor), []}, nil, none}. -file("src/gleamgen/pattern.gleam", 492). -spec tuple0() -> pattern({}, nil). tuple0() -> {tuple, [], nil}. -file("src/gleamgen/pattern.gleam", 756). -spec get_output(pattern(any(), MAA)) -> MAA. get_output(Pattern) -> erlang:element(3, Pattern). -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(LGN, LGO)) -> pattern({ok, LGN} | {error, any()}, LGO). 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(LGW, LGX)) -> pattern({ok, any()} | {error, LGW}, LGX). 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", 142). -spec as_(pattern(LHN, any()), binary()) -> pattern(LHN, gleamgen@expression:expression(LHN)). 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", 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(LIU, {{}, LIV}, LIW), pattern(LIV, LJA) ) -> pattern(gleamgen@type_@custom:custom_type(LIU, LIW), LJA). 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(LJH, {{{}, LJI}, LJJ}, LJK), pattern(LJI, LJO), pattern(LJJ, LJR) ) -> pattern(gleamgen@type_@custom:custom_type(LJH, LJK), {LJO, LJR}). 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(LJY, {{{{}, LJZ}, LKA}, LKB}, any()), pattern(LJZ, LKG), pattern(LKA, LKJ), pattern(LKB, LKM) ) -> pattern(LJY, {LKG, LKJ, LKM}). 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(LKR, {{{{{}, LKS}, LKT}, LKU}, LKV}, any()), pattern(LKS, LLA), pattern(LKT, LLD), pattern(LKU, LLG), pattern(LKV, LLJ) ) -> pattern(LKR, {LLA, LLD, LLG, LLJ}). 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(LLO, {{{{{{}, LLP}, LLQ}, LLR}, LLS}, LLT}, any()), pattern(LLP, LLY), pattern(LLQ, LMB), pattern(LLR, LME), pattern(LLS, LMH), pattern(LLT, LMK) ) -> pattern(LLO, {LLY, LMB, LME, LMH, LMK}). 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(LMP, {{{{{{{}, LMQ}, LMR}, LMS}, LMT}, LMU}, LMV}, any()), pattern(LMQ, LNA), pattern(LMR, LND), pattern(LMS, LNG), pattern(LMT, LNJ), pattern(LMU, LNM), pattern(LMV, LNP) ) -> pattern(LMP, {LNA, LND, LNG, LNJ, LNM, LNP}). 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(LNU, {{{{{{{{}, LNV}, LNW}, LNX}, LNY}, LNZ}, LOA}, LOB}, any()), pattern(LNV, LOG), pattern(LNW, LOJ), pattern(LNX, LOM), pattern(LNY, LOP), pattern(LNZ, LOS), pattern(LOA, LOV), pattern(LOB, LOY) ) -> pattern(LNU, {LOG, LOJ, LOM, LOP, LOS, LOV, LOY}). 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(LPD, {{{{{{{{{}, LPE}, LPF}, LPG}, LPH}, LPI}, LPJ}, LPK}, LPL}, any()), pattern(LPE, LPQ), pattern(LPF, LPT), pattern(LPG, LPW), pattern(LPH, LPZ), pattern(LPI, LQC), pattern(LPJ, LQF), pattern(LPK, LQI), pattern(LPL, LQL) ) -> pattern(LPD, {LPQ, LPT, LPW, LPZ, LQC, LQF, LQI, LQL}). 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(LQQ, {{{{{{{{{{}, LQR}, LQS}, LQT}, LQU}, LQV}, LQW}, LQX}, LQY}, LQZ}, any()), pattern(LQR, LRE), pattern(LQS, LRH), pattern(LQT, LRK), pattern(LQU, LRN), pattern(LQV, LRQ), pattern(LQW, LRT), pattern(LQX, LRW), pattern(LQY, LRZ), pattern(LQZ, LSC) ) -> pattern(LQQ, {LRE, LRH, LRK, LRN, LRQ, LRT, LRW, LRZ, LSC}). 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", 496). -spec tuple1(pattern(LSJ, LSK)) -> pattern({LSJ}, {LSK}). tuple1(Pattern) -> {tuple, [begin _pipe = Pattern, gleamgen_ffi:identity(_pipe) end], {erlang:element(3, Pattern)}}. -file("src/gleamgen/pattern.gleam", 505). -spec tuple2(pattern(LSP, LSQ), pattern(LST, LSU)) -> pattern({LSP, LST}, {LSQ, LSU}). 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(LSZ, LTA), pattern(LTD, LTE), pattern(LTH, LTI)) -> pattern({LSZ, LTD, LTH}, {LTA, LTE, LTI}). 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(LTN, LTO), pattern(LTR, LTS), pattern(LTV, LTW), pattern(LTZ, LUA) ) -> pattern({LTN, LTR, LTV, LTZ}, {LTO, LTS, LTW, LUA}). 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(LUF, LUG), pattern(LUJ, LUK), pattern(LUN, LUO), pattern(LUR, LUS), pattern(LUV, LUW) ) -> pattern({LUF, LUJ, LUN, LUR, LUV}, {LUG, LUK, LUO, LUS, LUW}). 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(LVB, LVC), pattern(LVF, LVG), pattern(LVJ, LVK), pattern(LVN, LVO), pattern(LVR, LVS), pattern(LVV, LVW) ) -> pattern({LVB, LVF, LVJ, LVN, LVR, LVV}, {LVC, LVG, LVK, LVO, LVS, LVW}). 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(LWB, LWC), pattern(LWF, LWG), pattern(LWJ, LWK), pattern(LWN, LWO), pattern(LWR, LWS), pattern(LWV, LWW), pattern(LWZ, LXA) ) -> pattern({LWB, LWF, LWJ, LWN, LWR, LWV, LWZ}, {LWC, LWG, LWK, LWO, LWS, LWW, LXA}). 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(LXF, LXG), pattern(LXJ, LXK), pattern(LXN, LXO), pattern(LXR, LXS), pattern(LXV, LXW), pattern(LXZ, LYA), pattern(LYD, LYE), pattern(LYH, LYI) ) -> pattern({LXF, LXJ, LXN, LXR, LXV, LXZ, LYD, LYH}, {LXG, LXK, LXO, LXS, LXW, LYA, LYE, LYI}). 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(LYN, LYO), pattern(LYR, LYS), pattern(LYV, LYW), pattern(LYZ, LZA), pattern(LZD, LZE), pattern(LZH, LZI), pattern(LZL, LZM), pattern(LZP, LZQ), pattern(LZT, LZU) ) -> pattern({LYN, LYR, LYV, LYZ, LZD, LZH, LZL, LZP, LZT}, {LYO, LYS, LYW, LZA, LZE, LZI, LZM, LZQ, LZU}). 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", 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(MAV), gleamgen@expression:expression(MAV)). 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(MBA, MBB)) -> pattern(gleam@option:option(MBA), MBB). 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>>] )}}.