-module(gleamgen@function). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([new0/2, new1/3, new2/4, new3/5, new4/6, new5/7, new6/8, new7/9, new8/10, new9/11, to_unchecked/1, get_function_name/1, render/3, anonymous/1]). -export_type([function_/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. -type function_(MSV, MSW) :: {function, list({binary(), gleamgen@types:generated_type(gleamgen@types:unchecked())}), gleamgen@types:generated_type(MSW), gleamgen@expression:expression(MSW)} | {gleam_phantom, MSV}. -file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 18). -spec new0( gleamgen@types:generated_type(MSX), fun(() -> gleamgen@expression:expression(MSX)) ) -> function_(fun((any()) -> MSX), MSX). new0(Returns, Handler) -> Body = Handler(), {function, [], Returns, Body}. -file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 26). -spec new1( {binary(), gleamgen@types:generated_type(MTD)}, gleamgen@types:generated_type(MTF), fun((gleamgen@expression:expression(MTD)) -> gleamgen@expression:expression(MTF)) ) -> function_(fun((MTD) -> MTF), MTF). new1(Arg1, Returns, Handler) -> Body = Handler(gleamgen@expression:unchecked_ident(erlang:element(1, Arg1))), {function, [{erlang:element(1, Arg1), begin _pipe = erlang:element(2, Arg1), gleamgen_ffi:identity(_pipe) end}], Returns, Body}. -file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 38). -spec new2( {binary(), gleamgen@types:generated_type(MTL)}, {binary(), gleamgen@types:generated_type(MTN)}, gleamgen@types:generated_type(MTP), fun((gleamgen@expression:expression(MTL), gleamgen@expression:expression(MTN)) -> gleamgen@expression:expression(MTP)) ) -> function_(fun((MTL, MTN) -> MTP), MTP). new2(Arg1, Arg2, Returns, Handler) -> Body = Handler( gleamgen@expression:unchecked_ident(erlang:element(1, Arg1)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg2)) ), {function, [{erlang:element(1, Arg1), begin _pipe = erlang:element(2, Arg1), gleamgen_ffi:identity(_pipe) end}, {erlang:element(1, Arg2), begin _pipe@1 = erlang:element(2, Arg2), gleamgen_ffi:identity(_pipe@1) end}], Returns, Body}. -file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 60). -spec new3( {binary(), gleamgen@types:generated_type(MTW)}, {binary(), gleamgen@types:generated_type(MTY)}, {binary(), gleamgen@types:generated_type(MUA)}, gleamgen@types:generated_type(MUC), fun((gleamgen@expression:expression(MTW), gleamgen@expression:expression(MTY), gleamgen@expression:expression(MUA)) -> gleamgen@expression:expression(MUC)) ) -> function_(fun((MTW, MTY, MUA) -> MUC), MUC). new3(Arg1, Arg2, Arg3, Returns, Handler) -> Body = Handler( gleamgen@expression:unchecked_ident(erlang:element(1, Arg1)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg2)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg3)) ), {function, [{erlang:element(1, Arg1), begin _pipe = erlang:element(2, Arg1), gleamgen_ffi:identity(_pipe) end}, {erlang:element(1, Arg2), begin _pipe@1 = erlang:element(2, Arg2), gleamgen_ffi:identity(_pipe@1) end}, {erlang:element(1, Arg3), begin _pipe@2 = erlang:element(2, Arg3), gleamgen_ffi:identity(_pipe@2) end}], Returns, Body}. -file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 89). -spec new4( {binary(), gleamgen@types:generated_type(MUK)}, {binary(), gleamgen@types:generated_type(MUM)}, {binary(), gleamgen@types:generated_type(MUO)}, {binary(), gleamgen@types:generated_type(MUQ)}, gleamgen@types:generated_type(MUS), fun((gleamgen@expression:expression(MUK), gleamgen@expression:expression(MUM), gleamgen@expression:expression(MUO), gleamgen@expression:expression(MUQ)) -> gleamgen@expression:expression(MUS)) ) -> function_(fun((MUK, MUM, MUO, MUQ) -> MUS), MUS). new4(Arg1, Arg2, Arg3, Arg4, Returns, Handler) -> Body = Handler( gleamgen@expression:unchecked_ident(erlang:element(1, Arg1)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg2)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg3)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg4)) ), {function, [{erlang:element(1, Arg1), begin _pipe = erlang:element(2, Arg1), gleamgen_ffi:identity(_pipe) end}, {erlang:element(1, Arg2), begin _pipe@1 = erlang:element(2, Arg2), gleamgen_ffi:identity(_pipe@1) end}, {erlang:element(1, Arg3), begin _pipe@2 = erlang:element(2, Arg3), gleamgen_ffi:identity(_pipe@2) end}, {erlang:element(1, Arg4), begin _pipe@3 = erlang:element(2, Arg4), gleamgen_ffi:identity(_pipe@3) end}], Returns, Body}. -file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 122). -spec new5( {binary(), gleamgen@types:generated_type(MVB)}, {binary(), gleamgen@types:generated_type(MVD)}, {binary(), gleamgen@types:generated_type(MVF)}, {binary(), gleamgen@types:generated_type(MVH)}, {binary(), gleamgen@types:generated_type(MVJ)}, gleamgen@types:generated_type(MVL), fun((gleamgen@expression:expression(MVB), gleamgen@expression:expression(MVD), gleamgen@expression:expression(MVF), gleamgen@expression:expression(MVH), gleamgen@expression:expression(MVJ)) -> gleamgen@expression:expression(MVL)) ) -> function_(fun((MVB, MVD, MVF, MVH, MVJ) -> MVL), MVL). new5(Arg1, Arg2, Arg3, Arg4, Arg5, Returns, Handler) -> Body = Handler( gleamgen@expression:unchecked_ident(erlang:element(1, Arg1)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg2)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg3)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg4)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg5)) ), {function, [{erlang:element(1, Arg1), begin _pipe = erlang:element(2, Arg1), gleamgen_ffi:identity(_pipe) end}, {erlang:element(1, Arg2), begin _pipe@1 = erlang:element(2, Arg2), gleamgen_ffi:identity(_pipe@1) end}, {erlang:element(1, Arg3), begin _pipe@2 = erlang:element(2, Arg3), gleamgen_ffi:identity(_pipe@2) end}, {erlang:element(1, Arg4), begin _pipe@3 = erlang:element(2, Arg4), gleamgen_ffi:identity(_pipe@3) end}, {erlang:element(1, Arg5), begin _pipe@4 = erlang:element(2, Arg5), gleamgen_ffi:identity(_pipe@4) end}], Returns, Body}. -file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 159). -spec new6( {binary(), gleamgen@types:generated_type(MVV)}, {binary(), gleamgen@types:generated_type(MVX)}, {binary(), gleamgen@types:generated_type(MVZ)}, {binary(), gleamgen@types:generated_type(MWB)}, {binary(), gleamgen@types:generated_type(MWD)}, {binary(), gleamgen@types:generated_type(MWF)}, gleamgen@types:generated_type(MWH), fun((gleamgen@expression:expression(MVV), gleamgen@expression:expression(MVX), gleamgen@expression:expression(MVZ), gleamgen@expression:expression(MWB), gleamgen@expression:expression(MWD), gleamgen@expression:expression(MWF)) -> gleamgen@expression:expression(MWH)) ) -> function_(fun((MVV, MVX, MVZ, MWB, MWD, MWF) -> MWH), MWH). new6(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Returns, Handler) -> Body = Handler( gleamgen@expression:unchecked_ident(erlang:element(1, Arg1)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg2)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg3)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg4)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg5)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg6)) ), {function, [{erlang:element(1, Arg1), begin _pipe = erlang:element(2, Arg1), gleamgen_ffi:identity(_pipe) end}, {erlang:element(1, Arg2), begin _pipe@1 = erlang:element(2, Arg2), gleamgen_ffi:identity(_pipe@1) end}, {erlang:element(1, Arg3), begin _pipe@2 = erlang:element(2, Arg3), gleamgen_ffi:identity(_pipe@2) end}, {erlang:element(1, Arg4), begin _pipe@3 = erlang:element(2, Arg4), gleamgen_ffi:identity(_pipe@3) end}, {erlang:element(1, Arg5), begin _pipe@4 = erlang:element(2, Arg5), gleamgen_ffi:identity(_pipe@4) end}, {erlang:element(1, Arg6), begin _pipe@5 = erlang:element(2, Arg6), gleamgen_ffi:identity(_pipe@5) end}], Returns, Body}. -file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 200). -spec new7( {binary(), gleamgen@types:generated_type(MWS)}, {binary(), gleamgen@types:generated_type(MWU)}, {binary(), gleamgen@types:generated_type(MWW)}, {binary(), gleamgen@types:generated_type(MWY)}, {binary(), gleamgen@types:generated_type(MXA)}, {binary(), gleamgen@types:generated_type(MXC)}, {binary(), gleamgen@types:generated_type(MXE)}, gleamgen@types:generated_type(MXG), fun((gleamgen@expression:expression(MWS), gleamgen@expression:expression(MWU), gleamgen@expression:expression(MWW), gleamgen@expression:expression(MWY), gleamgen@expression:expression(MXA), gleamgen@expression:expression(MXC), gleamgen@expression:expression(MXE)) -> gleamgen@expression:expression(MXG)) ) -> function_(fun((MWS, MWU, MWW, MWY, MXA, MXC, MXE) -> MXG), MXG). new7(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Returns, Handler) -> Body = Handler( gleamgen@expression:unchecked_ident(erlang:element(1, Arg1)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg2)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg3)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg4)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg5)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg6)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg7)) ), {function, [{erlang:element(1, Arg1), begin _pipe = erlang:element(2, Arg1), gleamgen_ffi:identity(_pipe) end}, {erlang:element(1, Arg2), begin _pipe@1 = erlang:element(2, Arg2), gleamgen_ffi:identity(_pipe@1) end}, {erlang:element(1, Arg3), begin _pipe@2 = erlang:element(2, Arg3), gleamgen_ffi:identity(_pipe@2) end}, {erlang:element(1, Arg4), begin _pipe@3 = erlang:element(2, Arg4), gleamgen_ffi:identity(_pipe@3) end}, {erlang:element(1, Arg5), begin _pipe@4 = erlang:element(2, Arg5), gleamgen_ffi:identity(_pipe@4) end}, {erlang:element(1, Arg6), begin _pipe@5 = erlang:element(2, Arg6), gleamgen_ffi:identity(_pipe@5) end}, {erlang:element(1, Arg7), begin _pipe@6 = erlang:element(2, Arg7), gleamgen_ffi:identity(_pipe@6) end}], Returns, Body}. -file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 245). -spec new8( {binary(), gleamgen@types:generated_type(MXS)}, {binary(), gleamgen@types:generated_type(MXU)}, {binary(), gleamgen@types:generated_type(MXW)}, {binary(), gleamgen@types:generated_type(MXY)}, {binary(), gleamgen@types:generated_type(MYA)}, {binary(), gleamgen@types:generated_type(MYC)}, {binary(), gleamgen@types:generated_type(MYE)}, {binary(), gleamgen@types:generated_type(MYG)}, gleamgen@types:generated_type(MYI), fun((gleamgen@expression:expression(MXS), gleamgen@expression:expression(MXU), gleamgen@expression:expression(MXW), gleamgen@expression:expression(MXY), gleamgen@expression:expression(MYA), gleamgen@expression:expression(MYC), gleamgen@expression:expression(MYE), gleamgen@expression:expression(MYG)) -> gleamgen@expression:expression(MYI)) ) -> function_(fun((MXS, MXU, MXW, MXY, MYA, MYC, MYE, MYG) -> MYI), MYI). new8(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Returns, Handler) -> Body = Handler( gleamgen@expression:unchecked_ident(erlang:element(1, Arg1)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg2)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg3)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg4)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg5)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg6)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg7)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg8)) ), {function, [{erlang:element(1, Arg1), begin _pipe = erlang:element(2, Arg1), gleamgen_ffi:identity(_pipe) end}, {erlang:element(1, Arg2), begin _pipe@1 = erlang:element(2, Arg2), gleamgen_ffi:identity(_pipe@1) end}, {erlang:element(1, Arg3), begin _pipe@2 = erlang:element(2, Arg3), gleamgen_ffi:identity(_pipe@2) end}, {erlang:element(1, Arg4), begin _pipe@3 = erlang:element(2, Arg4), gleamgen_ffi:identity(_pipe@3) end}, {erlang:element(1, Arg5), begin _pipe@4 = erlang:element(2, Arg5), gleamgen_ffi:identity(_pipe@4) end}, {erlang:element(1, Arg6), begin _pipe@5 = erlang:element(2, Arg6), gleamgen_ffi:identity(_pipe@5) end}, {erlang:element(1, Arg7), begin _pipe@6 = erlang:element(2, Arg7), gleamgen_ffi:identity(_pipe@6) end}, {erlang:element(1, Arg8), begin _pipe@7 = erlang:element(2, Arg8), gleamgen_ffi:identity(_pipe@7) end}], Returns, Body}. -file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 294). -spec new9( {binary(), gleamgen@types:generated_type(MYV)}, {binary(), gleamgen@types:generated_type(MYX)}, {binary(), gleamgen@types:generated_type(MYZ)}, {binary(), gleamgen@types:generated_type(MZB)}, {binary(), gleamgen@types:generated_type(MZD)}, {binary(), gleamgen@types:generated_type(MZF)}, {binary(), gleamgen@types:generated_type(MZH)}, {binary(), gleamgen@types:generated_type(MZJ)}, {binary(), gleamgen@types:generated_type(MZL)}, gleamgen@types:generated_type(MZN), fun((gleamgen@expression:expression(MYV), gleamgen@expression:expression(MYX), gleamgen@expression:expression(MYZ), gleamgen@expression:expression(MZB), gleamgen@expression:expression(MZD), gleamgen@expression:expression(MZF), gleamgen@expression:expression(MZH), gleamgen@expression:expression(MZJ), gleamgen@expression:expression(MZL)) -> gleamgen@expression:expression(MZN)) ) -> function_(fun((MYV, MYX, MYZ, MZB, MZD, MZF, MZH, MZJ, MZL) -> MZN), MZN). new9(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Returns, Handler) -> Body = Handler( gleamgen@expression:unchecked_ident(erlang:element(1, Arg1)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg2)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg3)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg4)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg5)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg6)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg7)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg8)), gleamgen@expression:unchecked_ident(erlang:element(1, Arg9)) ), {function, [{erlang:element(1, Arg1), begin _pipe = erlang:element(2, Arg1), gleamgen_ffi:identity(_pipe) end}, {erlang:element(1, Arg2), begin _pipe@1 = erlang:element(2, Arg2), gleamgen_ffi:identity(_pipe@1) end}, {erlang:element(1, Arg3), begin _pipe@2 = erlang:element(2, Arg3), gleamgen_ffi:identity(_pipe@2) end}, {erlang:element(1, Arg4), begin _pipe@3 = erlang:element(2, Arg4), gleamgen_ffi:identity(_pipe@3) end}, {erlang:element(1, Arg5), begin _pipe@4 = erlang:element(2, Arg5), gleamgen_ffi:identity(_pipe@4) end}, {erlang:element(1, Arg6), begin _pipe@5 = erlang:element(2, Arg6), gleamgen_ffi:identity(_pipe@5) end}, {erlang:element(1, Arg7), begin _pipe@6 = erlang:element(2, Arg7), gleamgen_ffi:identity(_pipe@6) end}, {erlang:element(1, Arg8), begin _pipe@7 = erlang:element(2, Arg8), gleamgen_ffi:identity(_pipe@7) end}, {erlang:element(1, Arg9), begin _pipe@8 = erlang:element(2, Arg9), gleamgen_ffi:identity(_pipe@8) end}], Returns, Body}. -file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 354). -spec to_unchecked(function_(any(), any())) -> function_(gleamgen@types:unchecked(), gleamgen@types:unchecked()). to_unchecked(Type_) -> gleamgen_ffi:identity(Type_). -file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 361). ?DOC(false). -spec get_function_name(any()) -> binary(). get_function_name(Type_) -> gleamgen_ffi:get_function_name(Type_). -file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 374). -spec render( function_(any(), any()), gleamgen@render:context(), gleam@option:option(binary()) ) -> gleamgen@render:rendered(). render(Func, Context, Name) -> Rendered_args = begin _pipe = erlang:element(2, Func), _pipe@1 = gleam@list:map( _pipe, fun(_capture) -> gleamgen@expression:render_attribute(_capture, Context) end ), gleamgen@render:pretty_list(_pipe@1) end, Rendered_type = gleamgen@types:render_type(erlang:element(3, Func)), Rendered_body = gleamgen@expression:render( erlang:element(4, Func), begin _record = Context, {context, erlang:element(2, _record), false} end ), {Rendered_name, Force_newlines} = case Name of {some, Name@1} -> {glam@doc:from_string(<<" "/utf8, Name@1/binary>>), true}; none -> {{concat, []}, false} end, _pipe@2 = glam@doc:concat( [glam@doc:from_string(<<"fn"/utf8>>), Rendered_name, Rendered_args, {break, <<" "/utf8>>, <<""/utf8>>}, case Rendered_type of {ok, Returned} -> glam@doc:concat( [glam@doc:from_string(<<"->"/utf8>>), {break, <<" "/utf8>>, <<""/utf8>>}, erlang:element(2, Returned), {break, <<" "/utf8>>, <<""/utf8>>}] ); {error, _} -> {concat, []} end, gleamgen@render:body( erlang:element(2, Rendered_body), Force_newlines )] ), {render, _pipe@2, gleamgen@render:merge_details( begin _pipe@3 = Rendered_type, _pipe@4 = gleam@result:map( _pipe@3, fun(T) -> erlang:element(3, T) end ), gleam@result:unwrap(_pipe@4, {rendered_details, []}) end, erlang:element(3, Rendered_body) )}. -file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 363). -spec anonymous(function_(NAI, any())) -> gleamgen@expression:expression(NAI). anonymous(Function) -> Type_ = begin _pipe = erlang:element(2, Function), _pipe@1 = gleam@list:map(_pipe, fun gleam@pair:second/1), gleamgen@types:unchecked_function( _pipe@1, begin _pipe@2 = erlang:element(3, Function), gleamgen_ffi:identity(_pipe@2) end ) end, Renderer = fun(Context) -> render(Function, Context, none) end, gleamgen@expression:new_anonymous_function(Renderer, Type_).