agentsclimarketplace

Python scala builder patterns

Skill cxcscmu/SkillLearnBench/skills/b4-skill-creator-claude-opus-4-6/python-scala-translation/python-scala-builder-patterns

Translating Python builder patterns, fluent interfaces, and factory functions to Scala. Use when converting Python classes with method chaining, __init__ with mutable lists/dicts, or builder/factory patterns to idiomatic Scala with immutable state and companion objects.From its SKILL.md

Install
npx -y skills add cxcscmu/SkillLearnBench --skill python-scala-builder-patterns

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

SKILL.md

1.8 KB, 369 tokens by cl100k_base, as published. Nobody here has run it

Python Builder & Factory Patterns to Scala

Fluent Builder with Immutable State

Python builder uses mutable lists and returns self:

class TokenizerBuilder(Generic[T]):
    def __init__(self):
        self._normalizers = []
    def with_normalizer(self, n):
        self._normalizers.append(n)
        return self

Scala idiomatic approach — use a case class with copy():

case class TokenizerBuilder[T](
  normalizers: List[String => String] = Nil,
  validators: List[T => Boolean] = Nil,
  metadata: Map[String, Any] = Map.empty
) {
  def withNormalizer(f: String => String): TokenizerBuilder[T] =
    copy(normalizers = normalizers :+ f)
  def build(): T => Token = { value =>
    // validate, convert, normalize
  }
}

Companion object provides apply:

object TokenizerBuilder {
  def apply[T](): TokenizerBuilder[T] = new TokenizerBuilder[T]()
}

Python init with default mutable args

Python def __init__(self, opts: dict = {}) — the mutable default is a bug-prone pattern. Scala case class defaults are evaluated fresh each time, so Map.empty is safe.

Method chaining return types

Python returns self for chaining. In Scala, if using mutable style, return this. If using immutable case class style, return copy(...) — this is preferred.

Companion Objects for Factory Methods

Python @classmethod → Scala companion object method:

object TokenMonad {
  def pure[A](value: A): TokenMonad[A] = new TokenMonad(value)
}

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.