Nir
12/04/2020, 7:25 PMinline
, so perhaps you'd want the sequence version to call the iterable version?Tobias Berger
12/04/2020, 7:59 PMIterable<T>.asSequence()
and Sequence<T>.asIterable()
work the same way and whether your function is inlined shouldn't depend on either of those types.
I would definitely avoid duplicating the code, so I see 2 possibilities:Tobias Berger
12/04/2020, 8:02 PMNir
12/04/2020, 8:03 PMNir
12/04/2020, 8:04 PMephemient
12/04/2020, 8:04 PMTobias Berger
12/04/2020, 8:05 PMiterator()
call and change nothing about the behaviourTobias Berger
12/04/2020, 8:06 PMephemient
12/04/2020, 8:06 PM.map()
etc.ephemient
12/04/2020, 8:06 PMephemient
12/04/2020, 8:07 PMTobias Berger
12/04/2020, 8:07 PM.sorted()
)
Still, definitely something to keep in mindNir
12/04/2020, 8:09 PMephemient
12/04/2020, 8:09 PM.sorted()
could be lazy (although Haskell manages it)Nir
12/04/2020, 8:09 PMfun<T, R> Sequence<T>.chunkedBy(key: (T) -> R) = asIterable().chunkedBy(key)
Nir
12/04/2020, 8:09 PMNir
12/04/2020, 8:10 PMephemient
12/04/2020, 8:10 PM.chunkedBy()
is implementedNir
12/04/2020, 8:10 PMTobias Berger
12/04/2020, 8:11 PMNir
12/04/2020, 8:11 PMsequence
Nir
12/04/2020, 8:11 PMfun<T, R> Iterable<T>.chunkedBy(key: (T) -> R) = sequence {
val iter = this@chunkedBy.iterator()
if (!iter.hasNext()) return@sequence
Nir
12/04/2020, 8:11 PMNir
12/04/2020, 8:11 PMephemient
12/04/2020, 8:11 PMephemient
12/04/2020, 8:12 PMasSequence()
themselvesephemient
12/04/2020, 8:12 PMephemient
12/04/2020, 8:12 PMNir
12/04/2020, 8:12 PMNir
12/04/2020, 8:13 PMNir
12/04/2020, 8:13 PMephemient
12/04/2020, 8:13 PMNir
12/04/2020, 8:14 PMTobias Berger
12/04/2020, 8:14 PMNir
12/04/2020, 8:14 PMNir
12/04/2020, 8:15 PMinline fun<T, R> Iterable<T>.chunkedBy(key: (T) -> R) = asSequence.chunkedBy(key).toList()
Nir
12/04/2020, 8:15 PMephemient
12/04/2020, 8:15 PMNir
12/04/2020, 8:15 PMNir
12/04/2020, 8:16 PMNir
12/04/2020, 8:16 PMlistOf(1,2,3).map { return }
will work for exampleephemient
12/04/2020, 8:16 PMTobias Berger
12/04/2020, 8:17 PMNir
12/04/2020, 8:17 PMNir
12/04/2020, 8:17 PMNir
12/04/2020, 8:17 PMephemient
12/04/2020, 8:17 PMNir
12/04/2020, 8:17 PMephemient
12/04/2020, 8:18 PMNir
12/04/2020, 8:18 PMephemient
12/04/2020, 8:18 PMephemient
12/04/2020, 8:18 PMNir
12/04/2020, 8:18 PMNir
12/04/2020, 8:18 PMephemient
12/04/2020, 8:19 PMNir
12/04/2020, 8:19 PMephemient
12/04/2020, 8:19 PMNir
12/04/2020, 8:19 PMTobias Berger
12/04/2020, 8:19 PMNir
12/04/2020, 8:20 PMNir
12/04/2020, 8:20 PMephemient
12/04/2020, 8:20 PMreturn
Nir
12/04/2020, 8:20 PMNir
12/04/2020, 8:21 PMinline fun<T, R> Iterable<T>.chunkedBy(key: (T) -> R) = asSequence().chunkedBy(key).toList()
Nir
12/04/2020, 8:21 PMephemient
12/04/2020, 8:21 PMNir
12/04/2020, 8:21 PMNir
12/04/2020, 8:21 PMTobias Berger
12/04/2020, 8:21 PMNir
12/04/2020, 8:22 PMNir
12/04/2020, 8:22 PMNir
12/04/2020, 8:22 PMephemient
12/04/2020, 8:22 PM.chunkedBy { return }
is not possible without inline, and Sequence operations require non-inline lambdasNir
12/04/2020, 8:22 PMTobias Berger
12/04/2020, 8:22 PMNir
12/04/2020, 8:23 PMNir
12/04/2020, 8:23 PMfun <T, R> Sequence<T>.map(transform: (T) -> R): Sequence<R>
Nir
12/04/2020, 8:23 PMNir
12/04/2020, 8:24 PMTobias Berger
12/04/2020, 8:24 PMephemient
12/04/2020, 8:24 PMNir
12/04/2020, 8:24 PMephemient
12/04/2020, 8:24 PMNir
12/04/2020, 8:24 PMNir
12/04/2020, 8:24 PMfun<T, R> Iterable<T>.chunkedBy(key: (T) -> R) = asSequence().chunkedBy(key).toList()
Nir
12/04/2020, 8:25 PMTobias Berger
12/04/2020, 8:25 PMNir
12/04/2020, 8:25 PMNir
12/04/2020, 8:25 PMTobias Berger
12/04/2020, 8:25 PMNir
12/04/2020, 8:25 PMNir
12/04/2020, 8:26 PMNir
12/04/2020, 8:26 PMTobias Berger
12/04/2020, 8:26 PMNir
12/04/2020, 8:27 PMTobias Berger
12/04/2020, 8:27 PMNir
12/04/2020, 8:27 PMNir
12/04/2020, 8:28 PMNir
12/04/2020, 8:28 PMTobias Berger
12/04/2020, 8:28 PM.sorted()
Nir
12/04/2020, 8:28 PMNir
12/04/2020, 8:28 PMephemient
12/04/2020, 8:29 PMNir
12/04/2020, 8:29 PMTobias Berger
12/04/2020, 8:29 PMNir
12/04/2020, 8:29 PMNir
12/04/2020, 8:30 PMTobias Berger
12/04/2020, 8:31 PMNir
12/04/2020, 8:31 PMNir
12/04/2020, 8:31 PMephemient
12/04/2020, 8:31 PMSequence.sorted()
is sorta-eager. it doesn't sort until a terminal operation is performed, but it sorts everything as soon as pulledephemient
12/04/2020, 8:32 PMTobias Berger
12/04/2020, 8:32 PMNir
12/04/2020, 8:32 PMephemient
12/04/2020, 8:32 PMNir
12/04/2020, 8:33 PMNir
12/04/2020, 8:33 PMNir
12/04/2020, 8:33 PMTobias Berger
12/04/2020, 8:34 PMNir
12/04/2020, 8:34 PMephemient
12/04/2020, 8:34 PMNir
12/04/2020, 8:34 PMephemient
12/04/2020, 8:34 PMNir
12/04/2020, 8:35 PMNir
12/04/2020, 8:35 PMephemient
12/04/2020, 8:35 PMNir
12/04/2020, 8:35 PMephemient
12/04/2020, 8:36 PMTobias Berger
12/04/2020, 8:36 PMThe reason for laziness here usually isn't laziness for its own sake, it's to be able to compose data structures without crazy overhead.I'd say that's basically the point. It's not so much about creating a lazy, pull-based flow, as it is about building a kind of pipeline based on iterator implementations, which doesn't need a new collection instance to save the result of each step.
Nir
12/04/2020, 8:36 PMNir
12/04/2020, 8:37 PMNir
12/04/2020, 8:37 PMNir
12/04/2020, 8:37 PMTobias Berger
12/04/2020, 8:38 PMephemient
12/04/2020, 8:38 PMephemient
12/04/2020, 8:41 PMTobias Berger
12/04/2020, 8:45 PMNir
12/04/2020, 8:56 PMNir
12/04/2020, 8:56 PMNir
12/04/2020, 8:57 PMTobias Berger
12/04/2020, 8:57 PMTobias Berger
12/04/2020, 8:57 PMNir
12/04/2020, 8:58 PMNir
12/04/2020, 8:58 PMTobias Berger
12/04/2020, 8:58 PMNir
12/04/2020, 8:59 PMTobias Berger
12/04/2020, 8:59 PMNir
12/04/2020, 8:59 PMNir
12/04/2020, 8:59 PMNir
12/04/2020, 8:59 PMNir
12/04/2020, 9:00 PMNir
12/04/2020, 9:00 PMTobias Berger
12/04/2020, 9:01 PMNir
12/04/2020, 9:01 PMNir
12/04/2020, 9:01 PMTobias Berger
12/04/2020, 9:01 PMNir
12/04/2020, 9:02 PMNir
12/04/2020, 9:02 PMTobias Berger
12/04/2020, 9:03 PM150 comments. This might be our new record
Nir
12/04/2020, 9:03 PMNir
12/04/2020, 9:03 PMNir
12/04/2020, 9:04 PMNir
12/04/2020, 9:04 PM