Back to Fpinscala

03.Answer

answerkey/localeffects/03.answer.md

latest532 B
Original Source
scala
final class STMap[S, K, V] private (private val table: HashMap[K, V]):
  def size: ST[S, Int] = ST(table.size)

  def apply(k: K): ST[S, V] = ST(table(k))

  def get(k: K): ST[S, Option[V]] = ST(table.get(k))

  def +=(kv: (K, V)): ST[S, Unit] = ST(table += kv)

  def -=(k: K): ST[S, Unit] = ST(table -= k)

object STMap:
  def empty[S, K, V]: ST[S, STMap[S, K, V]] =
    ST(new STMap(HashMap.empty))

  def fromMap[S, K, V](m: Map[K, V]): ST[S, STMap[S, K, V]] =
    ST(new STMap((HashMap.newBuilder ++= m).result()))