{"html":"<iframe src=\"https://hatenablog-parts.com/embed?url=https%3A%2F%2Fizumisy.work%2Fentry%2F2020%2F03%2F29%2F020414\" title=\"Scala\u3067\u306f\u7121\u540d\u95a2\u6570\u306f\u578b\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u3068\u308c\u306a\u3044 - Runner in the High\" class=\"embed-card embed-blogcard\" scrolling=\"no\" frameborder=\"0\" style=\"display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;\"></iframe>","type":"rich","description":"\u3053\u3093\u306a\u30b3\u30fc\u30c9\u3092\u66f8\u3044\u305f object App { type Value[A] = Seq[(A, A)] sealed trait Status { def map[A](f: Value[A] => Value[A]) = this match { case Valid(value) => Valid(f(value)) case Invalid() => Invalid() } } case class Valid[A](value: Value[A]) extends Status case class Invalid() extends Status } \u3053\u306e\u30b3\u30fc\u30c9\u3092\u30b3\u30f3\u30d1\u30a4\u30eb\u3059\u308b\u3068\u30017\u2026","blog_url":"https://izumisy.work/","blog_title":"Runner in the High","provider_name":"Hatena Blog","height":"190","categories":["Scala","\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0","\u30e1\u30e2"],"author_url":"https://blog.hatena.ne.jp/IzumiSy/","provider_url":"https://hatena.blog","version":"1.0","title":"Scala\u3067\u306f\u7121\u540d\u95a2\u6570\u306f\u578b\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u3068\u308c\u306a\u3044","image_url":null,"width":"100%","published":"2020-03-29 02:04:14","url":"https://izumisy.work/entry/2020/03/29/020414","author_name":"IzumiSy"}