# Multiple Scope "With" function

**URL:** <https://discuss.kotlinlang.org/t/multiple-scope-with-function/27429>\
**Category:** Language Design\
**Created:** [September 24, 2023, 6:55am UTC](https://discuss.kotlinlang.org/t/multiple-scope-with-function/27429 "2023-09-24T06:55:03Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![stefanus.ayudha](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.kotlinlang.org/stefanus.ayudha/32/10729_2.png) [@stefanus.ayudha](https://discuss.kotlinlang.org/u/stefanus.ayudha)\
**Post date:** [September 24, 2023, 6:55am UTC](https://discuss.kotlinlang.org/t/multiple-scope-with-function/27429/1 "2023-09-24T06:55:03Z")

</div>

```auto
fun <A, B, C, R> with(
    s1: A,
    s2: B,
    s3: C,
    block: @ContextFunctionTypeParams(count = 3) () -> R
): R =
    with(s1) {
        with(s2) {
            with(s3) {
                block.invoke()
            }
        }
    }

fun somefun() {
    val lambda: context(String, Int, Boolean) () -> Unit = {
        TODO()
    }

    with(
        "1",
        2,
        false,
        lambda
    )
}

```

to make easy with context receiver. i tried to make this but didn’t work.

---

<div class="post-metadata">

**Author:** ![kyay10](https://avatars.discourse-cdn.com/v4/letter/k/c57346/32.png) [@kyay10](https://discuss.kotlinlang.org/u/kyay10)\
**Post date:** [September 24, 2023, 5:56pm UTC](https://discuss.kotlinlang.org/t/multiple-scope-with-function/27429/2 "2023-09-24T17:56:49Z")

</div>

```auto
@Suppress("SUBTYPING_BETWEEN_CONTEXT_RECEIVERS")
public inline fun <A, B, C, R> with(a: A, b: B, c: C, block: context(A, B, C) () -> R): R {
  contract {
    callsInPlace(block, InvocationKind.EXACTLY_ONCE)
  }
  return block(a, b, c)
}

```
