for{ a <- managed(new FooStream()) b <- managed(new BarStream()) c <- managed(new BazStream()) } yield func(a,b,c)
っていうのが、
(managed(new FooStream()) |@| managed(new BarStream()) |@| managed(new BazSeam()) )(func)
って書けて、変数名いらなくなりますね!っていうだけのもの?
なんか前に言ってたような不満 URL が解消できそうなものができたっぽい(・ω・´) URL #Scala #Scalaz
2011-12-07 18:10:26 via web
joinではなくandの間違いじゃ・・・?(´・ω・`)と一ヶ月前の自分につっこみたい URL
2011-12-07 18:11:54 via web
https://github.com/scalaz/scalaz/tree/6.0.3
https://github.com/jsuereth/scala-arm/tree/1.0
Monad または Applicative にもしようとしたけれど、pure が
https://github.com/scalaz/scalaz/blob/6.0.3/core/src/main/scala/scalaz/Pure.scala#L7
implicit val ManagedResourcePure = new Pure[ManagedResource] { def pure[A](a: => A): P[A] // Resource はいつどうやって渡せば? }
ってできないので無理ぽ?(´・ω・`)
https://github.com/jsuereth/scala-arm/blob/1.0/src/main/scala/resource/package.scala#L15
scala-arm の package object のmanagedを呼び出して、Pureの instance を作りたいが、
DefaultManagedResourceのコンストラクタの implicit の引数の
DefaultManagedResource[R : Resource : Manifest](r : => R)
が、(Pureを生成する時点で) タイミング的に受け渡すの無理?だとしたらどうすれば?いやこれで十分なのかな?
ManagedResourceの型パラメータに対応するResourceっていう閉じるための処理をするものがimplicitで定義されてないといけなくて、すべての型に対してManagedResourceを生成できるわけではないのでそもそもpureをつくろうとすること自体が(ry
2011-12-08 01:09:13 via web