These are chat archives for scalajp/functional

19th
Oct 2015
Kazunari Mori
@kazzna
Oct 19 2015 00:41
with_context[A](f: Context[A]... ではダメなのです?
ってかわちさんが既に書いてた(>_<)
Manabu Nakamura
@gakuzzzz
Oct 19 2015 03:36
なんかできた?
trait Nest[A]

trait Context { self =>

  type Evidence

  def foo(c: Context)(implicit ev: c.Evidence =:= this.Evidence): Unit = ()

  def withContext(f: Context => Unit): Unit = {
    f(new Context { type Evidence = Nest[self.Evidence] })
  }

}
object Context {

  def withContext(f: Context => Unit): Unit = {
    f(new Context { type Evidence = Context.type })
  }

}
Context.withContext { c1 =>
  c1.foo(c1)

  c1.withContext { c2 =>
    c1.foo(c1)
//    c1.foo(c2)  // compile error
//    c2.foo(c1)  // compile error
    c2.foo(c2)
  }

}
todesking
@todesking
Oct 19 2015 05:35
!!!!
すごい
kenji yoshida
@xuwei-k
Oct 19 2015 08:15
外側のContextから生成したものを使って、内側のwithContext呼び出しやるならいくらでも方法ありそうだけど、そういう話じゃないのかと思ってた
todesking
@todesking
Oct 19 2015 08:18
確かにそれでいいですね(´・_・`)