blob: 9974d07a9653d808194dcbec695ad4a32b087880 [file] [log] [blame]
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
void main() {
print(sum([1, 2, 3, 4, 5]));
}
int sum(
Iterable<int>
list) => /*
fields={first:int,isEmpty:bool,Iterable<int>.rest:Iterable<int>},
type=Iterable<int>
*/
switch (list) {
Iterable(isEmpty: true) /*space=Iterable<int>(isEmpty: true)*/ => 0,
Iterable(
first: var x,
rest: var xs
) /*space=Iterable<int>(first: int, Iterable<int>.rest: Iterable<int> (Iterable<int>))*/ =>
x + sum(xs),
};
int sum1(
Iterable<int>
list) => /*
fields={first:int,isEmpty:bool,Iterable<int>.rest:Iterable<int>},
type=Iterable<int>
*/
switch (list) {
Iterable(isEmpty: true) /*space=Iterable<int>(isEmpty: true)*/ => 0,
Iterable(
first: var x,
rest: Iterable<int> xs
) /*space=Iterable<int>(first: int, Iterable<int>.rest: Iterable<int> (Iterable<int>))*/ =>
x + sum(xs),
};
int sum2(
Iterable<int>
list) => /*
error=non-exhaustive:Iterable<int>(first: int(), isEmpty: false, rest: Iterable<int>())/Iterable<int>(isEmpty: false),
fields={first:int,isEmpty:bool,Iterable<int>.rest:Iterable<int>},
type=Iterable<int>
*/
switch (list) {
Iterable(isEmpty: true) /*space=Iterable<int>(isEmpty: true)*/ => 0,
Iterable(
first: var x,
rest: List<int> xs
) /*space=Iterable<int>(first: int, Iterable<int>.rest: List<int> (Iterable<int>))*/ =>
x + sum(xs),
};
extension<A> on Iterable<A> {
Iterable<A> get rest => skip(1);
}