전체 글
-
Functional Effect 의 다양한 합성(composition)zio/zio-prelude 2021. 10. 10. 22:49
문제 아래와 같이 A, B, C, D 를 정의할 때, 다양하게 합성해 보자. def A: Option[String] = { println("A") Some("A") } def B: Option[Int] = { println("B") Some(1) } def C: Option[String] = { println("C") None } def D: Option[Int] = { println("D") None } 코드 Monad 합성 val monad: Option[(String, String)] = for { c "C is empty") def aValid: Validation[String, String] = Validation.fromOption(A).mapError(_ => "A is empty") val..
-
ZIO prelude 의 State Monadzio/zio-prelude 2021. 9. 26. 23:54
문제 Scala State Monad 의 문제를 zio-prelude 의 State Monad(ZPure) 를 사용해 구현하라. 코드 import zio.prelude.State object GolfDistance { def swing(n: Int): State[Int, Int] = State.modify(s => (s + n, s + n)) def main(args: Array[String]): Unit = { val distance: State[Int, Int] = for { _
-
NewTypes 과 Equal 을 활용한 객체 비교zio/zio-prelude 2021. 9. 23. 23:25
문제 다음과 같이 Site, bookSite, newsSite 를 정의할 때 final case class Site(domain: String, url: String) val bookSite = Site("naver.com", "http://book.naver.com") val newsSite = Site("naver.com", "http://news.naver.com") bookSite 와 newsSite 를 domain 기준으로 비교하면 같다. url 기준으로 비교하면 다르다. domain 과 url 기준으로 각각 비교하는 method 를 아래처럼 추가할 수 있지만 final case class Site(domain: String, url: String) { def equalByDomain(other..
-
href 값으로 empty 지정하기web/scalajs 2021. 9. 1. 09:48
문제 SPA(Single Page Application) 으로 만들면서, href 값으로 empty 를 지정하고 싶다. 그런데 아래와 같이 할 경우 error 가 발생한다. link 혹은 '#' 값으로 할 경우 browser url '#' 이 추가된다. link 코드 link 참고: https://stackoverflow.com/questions/134845/which-href-value-should-i-use-for-javascript-links-or-javascriptvoid0
-
Maximum distinct nodes in a Root to leaf path코딩테스트 2021. 8. 22. 22:49
문제 Given a Binary Tree, find count of distinct nodes in all the root to leaf paths and print the maximum. // left and right can be null if there are no subtree final case class Tree(value: Int, left: Tree, right: Tree) Examples: 참고: https://www.geeksforgeeks.org/maximum-distinct-nodes-in-a-root-to-leaf-path/ 풀이 과정 문제에 정의된 Tree 구조에서 상위 ancestor 정보가 각각의 node 마다 있으면 좋겠다. step1 에서 처럼 모든 node 에 각각 an..
-
ZLayer module pattern 을 이용한 dependency injectionzio/zio1 2021. 8. 18. 17:44
문제 zio module pattern 1.0 은 쓸데없이 복잡해 차라리 constructor dependency injection 을 쓰는게 낫다고 생각해 왔다. zio module pattern 2.0 이 최근에 소개되었는데, zio magic 과 함께 쓰면 어느정도 쓸만한 것 같다. 코드 import zio.clock.Clock import zio.console.Console import zio.magic._ import zio.{ App, ExitCode, Has, Ref, UIO, URIO, URLayer, ZIO, ZLayer } object ZLayerTest extends App { trait Logging { def log(line: String): UIO[Unit] } object Lo..
-
mhtml - non-reacitve 적용하기web/mhtml 2021. 8. 12. 18:46
monadic html 에서는 reactive functional style 이 기본으로 오히려 non-reactive 하게 만들기가 어려운 것 같다. 그런데 가끔씩 non-reactive 하게 구현할 필요가 있다. submit 버튼을 누를 때 화면 변화가 있도록 만들어 보자. 첫번째 코드 import mhtml._ import org.scalajs.dom import scala.scalajs.js import scala.xml.Elem object MainView { case class Info(query: String, deivce: String) def view() = { val submitVar: Var[Unit] = Var(()) val queryVar: Var[String] = Var("") ..
-
mhtml - Seq[A] 를 화면에 보여주기web/mhtml 2021. 8. 12. 14:38
monadic html 가이드 를 보면 scala.xml.Group 을 이용해 Seq[Node] 를 mount 할 수 있다고 하는데, 아래와 같이 코딩하는 것도 잘 동작했다. fomantic-ui List 를 활용했다. 코드 def showList(main: Seq[String], sub: Seq[String]): Elem = Main {main.map(x => {x})} Sub {sub.map(x => {x})} 출력 결과 예시 Main People News Sub Banner