-
ZIO prelude 의 Reader Monadzio/zio-prelude 2022. 7. 24. 00:34
문제
zpure 를 이용한 Reader Monad 를 살펴보자
코드
import zio._ import zio.prelude.Reader case class Cat(name: String) case class Dog(name: String) object ZpureReaderTest { def main(args: Array[String]): Unit = { val catName: Reader[Cat, String] = Reader.serviceWith(_.name) val dogName: Reader[Dog, String] = Reader.serviceWith(_.name) val allName: Reader[Dog with Cat, String] = for { c <- catName d <- dogName } yield s"All names: cat=$c, dog=$d" val dog = Dog("Puppy") val cat = Cat("Kitty") val env: ZEnvironment[Dog with Cat] = ZEnvironment[Dog, Cat](dog, cat) val r = allName.provideEnvironment(env).run println(r) // All names: cat=Kitty, dog=Puppy } }
설명
Error 까지 포함 시킬 경우 아래처럼 EReader 를 사용할 수 있다.
import zio.prelude.Reader val catName: EReader[Cat, String, Nothing] = ZPure.serviceWithPure[Cat](cat => ZPure.fail("FAIL !!!"))
'zio > zio-prelude' 카테고리의 다른 글
Functional Effect 의 다양한 합성(composition) (0) 2021.10.10 ZIO prelude 의 State Monad (0) 2021.09.26 NewTypes 과 Equal 을 활용한 객체 비교 (0) 2021.09.23