- versionは0.7a
- scalaz-streamではなくscalaz-concurrentにあるクラス
- scalaz-streamは、これと
Task
にかなり依存してるので、まずはこれらを理解することが重要
import scala.annotation.tailrec | |
import scalaz._ | |
import scalaz.Leibniz.=== | |
object Ideal { | |
private final case class Pure[F[_], A](a: A) extends Ideal[F, A] | |
private final case class Suspend[F[_], A](fa: F[A]) extends Ideal[F, A] | |
private sealed abstract case class Gosub[F[_], B]() extends Ideal[F, B] { | |
type C | |
val a: () => Ideal[F, C] |
trait HApply[F[_[_]]] extends HFunctor[F] { | |
def apply2[A1[_], A2[_], Z[_]](a1: F[A1], a2: F[A2])(f: ({type l[a] = (A1[a], A2[a])})#l ~> Z): F[Z] | |
def apply3[A1[_], A2[_], A3[_], Z[_]](a1: F[A1], a2: F[A2], a3: F[A3])(f: ({type l[a] = (A1[a], A2[a], A3[a])})#l ~> Z): F[Z] = | |
apply2[({type l[a] = (A1[a], A2[a])})#l, A3, Z](tuple2(a1, a2), a3)( | |
new (({type l[a] = ((A1[a], A2[a]), A3[a])})#l ~> Z){ | |
def apply[a](fa: ((A1[a], A2[a]), A3[a])) = | |
f((fa._1._1, fa._1._2, fa._2)) | |
} | |
) |
* { | |
font-size: 12pt; | |
font-family: monospace; | |
font-weight: normal; | |
font-style: normal; | |
text-decoration: none; | |
color: black; | |
cursor: default; | |
} |
Task
にかなり依存してるので、まずはこれらを理解することが重要Introducing Incremental DOM — Google Developers — Medium
Reactやvirtual-dom、Glimmer(Ember)などVirtual DOMの実装は色々あるが、これらのVirtual DOM実装には2つの問題がある
これらを解決するためにIncremental DOMと言うものを作っている(WIP)
パターンとはその言語が抽象化できなかった敗北の歴史である。 しかしどんなに優れた言語であってもあらゆる繰り返しに勝てるわけではない。 人は必ずメタ繰り返しを欲するからだ。 そしてそれはRustも例外ではない。
ここでは、OOPでも知られているパターンよりも、Rustに特有のパターンを思いつく限りまとめてみた。名前は適当。
public class PhantomBuilderSample { | |
public static class Data { | |
private final int field1; | |
private final int field2; | |
private final int field3; | |
private final int optField1; | |
private final int optField2; | |
private Data(Builder<OK, OK, OK> builder) { |