mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-04 04:08:19 +00:00
Wrap list encoders in Encode.custom for now
This commit is contained in:
parent
e83175cf75
commit
c647973dee
2 changed files with 17 additions and 6 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
"###
|
||||
)
|
||||
})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue