This mapping has 2 multi-map groups: several pairings are equally correct there. The code view shows one arbitrary valid pairing, not the only one.

Before

…lines 1–29 unchanged (29 lines)
30 def flatMap[V](f: T => Result[V]): Result[V] = f(value)
31 def get = value
32 def toOption: Option[T] = Some(value)
33 def toEither: Either[String, T] = Right(value)
34 def errorOpt: Option[String] = None
35 }
36 final case class Failure(error: String) extends Result[Nothing] {
37 def map[V](f: Nothing => V): Result[Nothing] = this
38
39 def flatMap[V](f: Nothing => Result[V]): Result[Nothing] = this
40 def get = sys.error(error)
41 def toOption: Option[Nothing] = None
42 def toEither: Either[String, Nothing] = Left(error)
43 def errorOpt: Option[String] = Some(error)
44 }
45
46 def fromEither[T](either: Either[String, T]) = either match {
47 case Left(err) => Result.Failure(err)
48 case Right(value) => Result.Success(value)
49 }
50
…lines 51–59 unchanged (9 lines)
60 ): Result[M[B]] = {
61 boundary {
62 val builder = factory.newBuilder
63 builder.sizeHint(in)
64 in.iterator.foreach {
65 case Success(b) => builder += b
66 case Failure(error) => boundary.break(Failure(error))
67 }
68
69 builder.result()
70 }
71 }
72
…lines 73–77 unchanged (5 lines)
78 )(using factory: Factory[B, Collection[B]]): Result[Collection[B]] = {
79 boundary {
80 val builder = factory.newBuilder
81 builder.sizeHint(collection)
82 collection.iterator.map(_.flatMap(f)).foreach {
83 case Success(b) => builder += b
84 case Failure(error) => boundary.break(Failure(error))
85 }
86
87 builder.result()
88 }
89 }
90
91 final class Exception(val error: String) extends java.lang.Exception(error)
92}
93

After

…lines 1–30 unchanged (30 lines)
31 def get = value
32 def toOption: Option[T] = Some(value)
33 def toEither: Either[String, T] = Right(value)
34 def errorOpt: Option[String] = None
35 }
36 final case class Failure(
37 error: String,
38 @com.lihaoyi.unroll path: java.nio.file.Path = null,
39 index: Int = -1,
40 next: Option[Failure] = None
41 ) extends Result[Nothing] {
42 def map[V](f: Nothing => V): Result[Nothing] = this
43
44 def flatMap[V](f: Nothing => Result[V]): Result[Nothing] = this
45 def get = sys.error(error)
46 def toOption: Option[Nothing] = None
47 def toEither: Either[String, Nothing] = Left(error)
48 def errorOpt: Option[String] = Some(error)
49 }
50
51 object Failure {
52 def combine(failures: Seq[Failure]): Failure = {
53 val flattened: Seq[Failure] = failures.flatMap(f =>
54 Iterator.unfold(Option(f))(_.map(t => t -> t.next))
55 )
56 flattened
57 .foldLeft(Option.empty[Failure])((f0, f) => Some(Failure(f.error, f.path, f.index, f0)))
58 .get
59 }
60 }
61
62 def fromEither[T](either: Either[String, T]) = either match {
63 case Left(err) => Result.Failure(err)
64 case Right(value) => Result.Success(value)
65 }
66
…lines 67–75 unchanged (9 lines)
76 ): Result[M[B]] = {
77 boundary {
78 val builder = factory.newBuilder
79 builder.sizeHint(in)
80 in.iterator.foreach {
81 case Success(b) => builder += b
82 case f: Failure => boundary.break(f)
83 }
84
85 builder.result()
86 }
87 }
88
…lines 89–93 unchanged (5 lines)
94 )(using factory: Factory[B, Collection[B]]): Result[Collection[B]] = {
95 boundary {
96 val builder = factory.newBuilder
97 builder.sizeHint(collection)
98 collection.iterator.map(_.flatMap(f)).foreach {
99 case Success(b) => builder += b
100 case f: Failure => boundary.break(f)
101 }
102
103 builder.result()
104 }
105 }
106
107 final class Exception(val error: String) extends java.lang.Exception(error)
108}
109

Before

compilation_unit
package_clause
package "package"
package_identifier
identifier "mill"
. "."
identifier "api"
. "."
identifier "daemon"
import_declaration
import "import"
identifier "scala"
. "."
identifier "collection"
. "."
identifier "Factory"
import_declaration
import "import"
identifier "scala"
. "."
identifier "util"
. "."
identifier "boundary"
block_comment
/* "/*"
*/ " */"
trait_definition (+106 nodes collapsed)
object_definition
object "object"
identifier "Result"
template_body
{ "{"
function_definition (+60 nodes collapsed)
class_definition (+157 nodes collapsed)
class_definition
modifiers
final "final"
case "case"
class "class"
identifier "Failure"
class_parameters
( "("
class_parameter
identifier "error"
: ":"
type_identifier "String"
) ")"
extends_clause
extends "extends"
generic_type
type_identifier "Result"
type_arguments
[ "["
type_identifier "Nothing"
] "]"
template_body (+123 nodes collapsed)
function_definition (+62 nodes collapsed)
extension_definition (+45 nodes collapsed)
block_comment
/* "/*"
*/ " */"
function_definition
def "def"
identifier "sequence"
type_parameters
[ "["
identifier "B"
, ","
identifier "M"
type_parameters
[ "["
identifier "X"
] "]"
upper_bound
<: "<:"
generic_type
type_identifier "IterableOnce"
type_arguments
[ "["
type_identifier "X"
] "]"
] "]"
parameters
( "("
parameter
identifier "in"
: ":"
generic_type
type_identifier "M"
type_arguments
[ "["
generic_type
type_identifier "Result"
type_arguments
[ "["
type_identifier "B"
] "]"
] "]"
) ")"
parameters
( "("
using "using"
parameter
identifier "factory"
: ":"
generic_type
type_identifier "Factory"
type_arguments
[ "["
type_identifier "B"
, ","
generic_type
type_identifier "M"
type_arguments
[ "["
type_identifier "B"
] "]"
] "]"
) ")"
: ":"
generic_type
type_identifier "Result"
type_arguments
[ "["
generic_type
type_identifier "M"
type_arguments
[ "["
type_identifier "B"
] "]"
] "]"
= "="
block
{ "{"
call_expression
identifier "boundary"
block
{ "{"
val_definition
val "val"
identifier "builder"
= "="
field_expression
identifier "factory"
. "."
identifier "newBuilder"
call_expression
field_expression
identifier "builder"
. "."
identifier "sizeHint"
arguments
( "("
identifier "in"
) ")"
call_expression
field_expression
field_expression
identifier "in"
. "."
identifier "iterator"
. "."
identifier "foreach"
case_block
{ "{"
case_clause
case "case"
case_class_pattern
type_identifier "Success"
( "("
identifier "b"
) ")"
=> "=>"
infix_expression
identifier "builder"
operator_identifier "+="
identifier "b"
case_clause
case "case"
case_class_pattern
type_identifier "Failure"
( "("
identifier "error"
) ")"
=> "=>"
call_expression
field_expression
identifier "boundary"
. "."
identifier "break"
arguments any 2:1
( "("
call_expression
identifier "Failure"
arguments any 2:1
( "("
identifier "error"
) ")"
) ")"
} "}"
call_expression
field_expression
identifier "builder"
. "."
identifier "result"
arguments
( "("
) ")"
} "}"
} "}"
block_comment
/* "/*"
*/ " */"
function_definition
def "def"
identifier "traverse"
type_parameters
[ "["
identifier "A"
, ","
identifier "B"
, ","
identifier "Collection"
type_parameters
[ "["
identifier "x"
] "]"
upper_bound
<: "<:"
generic_type
type_identifier "IterableOnce"
type_arguments
[ "["
type_identifier "x"
] "]"
] "]"
parameters
( "("
parameter
identifier "collection"
: ":"
generic_type
type_identifier "Collection"
type_arguments
[ "["
generic_type
type_identifier "Result"
type_arguments
[ "["
type_identifier "A"
] "]"
] "]"
) ")"
parameters
( "("
parameter
identifier "f"
: ":"
function_type
parameter_types
type_identifier "A"
=> "=>"
generic_type
type_identifier "Result"
type_arguments
[ "["
type_identifier "B"
] "]"
) ")"
parameters
( "("
using "using"
parameter
identifier "factory"
: ":"
generic_type
type_identifier "Factory"
type_arguments
[ "["
type_identifier "B"
, ","
generic_type
type_identifier "Collection"
type_arguments
[ "["
type_identifier "B"
] "]"
] "]"
) ")"
: ":"
generic_type
type_identifier "Result"
type_arguments
[ "["
generic_type
type_identifier "Collection"
type_arguments
[ "["
type_identifier "B"
] "]"
] "]"
= "="
block
{ "{"
call_expression
identifier "boundary"
block
{ "{"
val_definition
val "val"
identifier "builder"
= "="
field_expression
identifier "factory"
. "."
identifier "newBuilder"
call_expression
field_expression
identifier "builder"
. "."
identifier "sizeHint"
arguments
( "("
identifier "collection"
) ")"
call_expression
field_expression (+24 nodes collapsed)
case_block
{ "{"
case_clause
case "case"
case_class_pattern
type_identifier "Success"
( "("
identifier "b"
) ")"
=> "=>"
infix_expression
identifier "builder"
operator_identifier "+="
identifier "b"
case_clause
case "case"
case_class_pattern
type_identifier "Failure"
( "("
identifier "error"
) ")"
=> "=>"
call_expression
field_expression
identifier "boundary"
. "."
identifier "break"
arguments any 2:1
( "("
call_expression
identifier "Failure"
arguments any 2:1
( "("
identifier "error"
) ")"
) ")"
} "}"
call_expression
field_expression
identifier "builder"
. "."
identifier "result"
arguments
( "("
) ")"
} "}"
} "}"
class_definition (+26 nodes collapsed)
} "}"

After

compilation_unit
package_clause
package "package"
package_identifier
identifier "mill"
. "."
identifier "api"
. "."
identifier "daemon"
import_declaration
import "import"
identifier "scala"
. "."
identifier "collection"
. "."
identifier "Factory"
import_declaration
import "import"
identifier "scala"
. "."
identifier "util"
. "."
identifier "boundary"
block_comment
/* "/*"
*/ " */"
trait_definition (+106 nodes collapsed)
object_definition
object "object"
identifier "Result"
template_body
{ "{"
function_definition (+60 nodes collapsed)
class_definition (+157 nodes collapsed)
class_definition
modifiers
final "final"
case "case"
class "class"
identifier "Failure"
class_parameters
( "("
class_parameter
identifier "error"
: ":"
type_identifier "String"
, ","
class_parameter
annotation
@ "@"
stable_type_identifier
stable_identifier
identifier "com"
. "."
identifier "lihaoyi"
. "."
type_identifier "unroll"
identifier "path"
: ":"
stable_type_identifier
stable_identifier
stable_identifier
identifier "java"
. "."
identifier "nio"
. "."
identifier "file"
. "."
type_identifier "Path"
= "="
null_literal "null"
, ","
class_parameter
identifier "index"
: ":"
type_identifier "Int"
= "="
integer_literal "-1"
, ","
class_parameter
identifier "next"
: ":"
generic_type
type_identifier "Option"
type_arguments
[ "["
type_identifier "Failure"
] "]"
= "="
identifier "None"
) ")"
extends_clause
extends "extends"
generic_type
type_identifier "Result"
type_arguments
[ "["
type_identifier "Nothing"
] "]"
template_body (+123 nodes collapsed)
object_definition
object "object"
identifier "Failure"
template_body
{ "{"
function_definition
def "def"
identifier "combine"
parameters
( "("
parameter
identifier "failures"
: ":"
generic_type
type_identifier "Seq"
type_arguments
[ "["
type_identifier "Failure"
] "]"
) ")"
: ":"
type_identifier "Failure"
= "="
block
{ "{"
val_definition
val "val"
identifier "flattened"
: ":"
generic_type
type_identifier "Seq"
type_arguments
[ "["
type_identifier "Failure"
] "]"
= "="
call_expression
field_expression
identifier "failures"
. "."
identifier "flatMap"
arguments
( "("
lambda_expression
identifier "f"
=> "=>"
indented_block
call_expression
call_expression
field_expression
identifier "Iterator"
. "."
identifier "unfold"
arguments
( "("
call_expression
identifier "Option"
arguments
( "("
identifier "f"
) ")"
) ")"
arguments
( "("
call_expression
field_expression
wildcard
_ "_"
. "."
identifier "map"
arguments
( "("
lambda_expression
identifier "t"
=> "=>"
infix_expression
identifier "t"
operator_identifier "->"
field_expression
identifier "t"
. "."
identifier "next"
) ")"
) ")"
) ")"
field_expression
call_expression
call_expression
field_expression
identifier "flattened"
. "."
identifier "foldLeft"
arguments
( "("
generic_function
field_expression
identifier "Option"
. "."
identifier "empty"
type_arguments
[ "["
type_identifier "Failure"
] "]"
) ")"
arguments
( "("
lambda_expression
bindings
( "("
binding
identifier "f0"
, ","
binding
identifier "f"
) ")"
=> "=>"
call_expression
identifier "Some"
arguments
( "("
call_expression
identifier "Failure"
arguments
( "("
field_expression
identifier "f"
. "."
identifier "error"
, ","
field_expression
identifier "f"
. "."
identifier "path"
, ","
field_expression
identifier "f"
. "."
identifier "index"
, ","
identifier "f0"
) ")"
) ")"
) ")"
. "."
identifier "get"
} "}"
} "}"
function_definition (+62 nodes collapsed)
extension_definition (+45 nodes collapsed)
block_comment
/* "/*"
*/ " */"
function_definition
def "def"
identifier "sequence"
type_parameters
[ "["
identifier "B"
, ","
identifier "M"
type_parameters
[ "["
identifier "X"
] "]"
upper_bound
<: "<:"
generic_type
type_identifier "IterableOnce"
type_arguments
[ "["
type_identifier "X"
] "]"
] "]"
parameters
( "("
parameter
identifier "in"
: ":"
generic_type
type_identifier "M"
type_arguments
[ "["
generic_type
type_identifier "Result"
type_arguments
[ "["
type_identifier "B"
] "]"
] "]"
) ")"
parameters
( "("
using "using"
parameter
identifier "factory"
: ":"
generic_type
type_identifier "Factory"
type_arguments
[ "["
type_identifier "B"
, ","
generic_type
type_identifier "M"
type_arguments
[ "["
type_identifier "B"
] "]"
] "]"
) ")"
: ":"
generic_type
type_identifier "Result"
type_arguments
[ "["
generic_type
type_identifier "M"
type_arguments
[ "["
type_identifier "B"
] "]"
] "]"
= "="
block
{ "{"
call_expression
identifier "boundary"
block
{ "{"
val_definition
val "val"
identifier "builder"
= "="
field_expression
identifier "factory"
. "."
identifier "newBuilder"
call_expression
field_expression
identifier "builder"
. "."
identifier "sizeHint"
arguments
( "("
identifier "in"
) ")"
call_expression
field_expression
field_expression
identifier "in"
. "."
identifier "iterator"
. "."
identifier "foreach"
case_block
{ "{"
case_clause
case "case"
case_class_pattern
type_identifier "Success"
( "("
identifier "b"
) ")"
=> "=>"
infix_expression
identifier "builder"
operator_identifier "+="
identifier "b"
case_clause
case "case"
typed_pattern
identifier "f"
: ":"
type_identifier "Failure"
=> "=>"
call_expression
field_expression
identifier "boundary"
. "."
identifier "break"
arguments any 2:1
( "("
identifier "f"
) ")"
} "}"
call_expression
field_expression
identifier "builder"
. "."
identifier "result"
arguments
( "("
) ")"
} "}"
} "}"
block_comment
/* "/*"
*/ " */"
function_definition
def "def"
identifier "traverse"
type_parameters
[ "["
identifier "A"
, ","
identifier "B"
, ","
identifier "Collection"
type_parameters
[ "["
identifier "x"
] "]"
upper_bound
<: "<:"
generic_type
type_identifier "IterableOnce"
type_arguments
[ "["
type_identifier "x"
] "]"
] "]"
parameters
( "("
parameter
identifier "collection"
: ":"
generic_type
type_identifier "Collection"
type_arguments
[ "["
generic_type
type_identifier "Result"
type_arguments
[ "["
type_identifier "A"
] "]"
] "]"
) ")"
parameters
( "("
parameter
identifier "f"
: ":"
function_type
parameter_types
type_identifier "A"
=> "=>"
generic_type
type_identifier "Result"
type_arguments
[ "["
type_identifier "B"
] "]"
) ")"
parameters
( "("
using "using"
parameter
identifier "factory"
: ":"
generic_type
type_identifier "Factory"
type_arguments
[ "["
type_identifier "B"
, ","
generic_type
type_identifier "Collection"
type_arguments
[ "["
type_identifier "B"
] "]"
] "]"
) ")"
: ":"
generic_type
type_identifier "Result"
type_arguments
[ "["
generic_type
type_identifier "Collection"
type_arguments
[ "["
type_identifier "B"
] "]"
] "]"
= "="
block
{ "{"
call_expression
identifier "boundary"
block
{ "{"
val_definition
val "val"
identifier "builder"
= "="
field_expression
identifier "factory"
. "."
identifier "newBuilder"
call_expression
field_expression
identifier "builder"
. "."
identifier "sizeHint"
arguments
( "("
identifier "collection"
) ")"
call_expression
field_expression (+24 nodes collapsed)
case_block
{ "{"
case_clause
case "case"
case_class_pattern
type_identifier "Success"
( "("
identifier "b"
) ")"
=> "=>"
infix_expression
identifier "builder"
operator_identifier "+="
identifier "b"
case_clause
case "case"
typed_pattern
identifier "f"
: ":"
type_identifier "Failure"
=> "=>"
call_expression
field_expression
identifier "boundary"
. "."
identifier "break"
arguments any 2:1
( "("
identifier "f"
) ")"
} "}"
call_expression
field_expression
identifier "builder"
. "."
identifier "result"
arguments
( "("
) ")"
} "}"
} "}"
class_definition (+26 nodes collapsed)
} "}"