Wrap list encoders in Encode.custom for now

This commit is contained in:
Ayaz Hafiz 2022-07-13 13:58:13 -04:00
parent e83175cf75
commit c647973dee
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58
2 changed files with 17 additions and 6 deletions

View file

@ -370,6 +370,15 @@ fn to_encoder_list(env: &mut Env<'_>, fn_name: Symbol) -> (Expr, Variable) {
CalledVia::Space,
);
// Encode.custom \bytes, fmt -> Encode.appendWith bytes (Encode.list ..) fmt
let (body, this_encoder_var) = wrap_in_encode_custom(
env,
encode_list_call,
this_list_encoder_var,
lst_sym,
list_var,
);
// \lst -> Encode.list lst (\elem -> Encode.toEncoder elem)
// Create fn_var for ambient capture; we fix it up below.
let fn_var = synth_var(env.subs, Content::Error);
@ -392,7 +401,7 @@ fn to_encoder_list(env: &mut Env<'_>, fn_name: Symbol) -> (Expr, Variable) {
Content::Structure(FlatType::Func(
list_var_slice,
fn_clos_var,
this_list_encoder_var,
this_encoder_var,
)),
);
@ -400,7 +409,7 @@ fn to_encoder_list(env: &mut Env<'_>, fn_name: Symbol) -> (Expr, Variable) {
let clos = Closure(ClosureData {
function_type: fn_var,
closure_type: fn_clos_var,
return_type: this_list_encoder_var,
return_type: this_encoder_var,
name: fn_name,
captured_symbols: vec![],
recursive: Recursive::NotRecursive,
@ -409,7 +418,7 @@ fn to_encoder_list(env: &mut Env<'_>, fn_name: Symbol) -> (Expr, Variable) {
AnnotatedMark::known_exhaustive(),
Loc::at_zero(Pattern::Identifier(lst_sym)),
)],
loc_body: Box::new(Loc::at_zero(encode_list_call)),
loc_body: Box::new(Loc::at_zero(body)),
});
(clos, fn_var)

View file

@ -718,13 +718,15 @@ fn list() {
assert_snapshot!(golden, @r###"
# derived for List Str
# List val -[[toEncoder_list(0)]]-> Encoder fmt | fmt has EncoderFormatting, val has Encoding
# List val -[[toEncoder_list(0)]]-> (List U8, fmt -[[] + fmt:Encode.list(19):4]-> List U8) | fmt has EncoderFormatting, val has Encoding
# List val -[[toEncoder_list(0)]]-> (List U8, fmt -[[custom(4) (List val)]]-> List U8) | fmt has EncoderFormatting, val has Encoding
# Specialization lambda sets:
# @<1>: [[toEncoder_list(0)]]
# @<2>: [[] + fmt:Encode.list(19):4] | fmt has EncoderFormatting
# @<2>: [[custom(4) (List val)]] | val has Encoding
#Derived.toEncoder_list =
\#Derived.lst ->
Encode.list #Derived.lst \#Derived.elem -> Encode.toEncoder #Derived.elem
Encode.custom \#Derived.bytes, #Derived.fmt ->
Encode.appendWith #Derived.bytes (Encode.list #Derived.lst
\#Derived.elem -> Encode.toEncoder #Derived.elem) #Derived.fmt
"###
)
})