Find typeclass instances #22

Open
opened 2026-01-05 21:16:35 +00:00 by mprihoda · 0 comments
mprihoda commented 2026-01-05 21:16:35 +00:00 (Migrated from github.com)

Problem

Agent needs to know where to find typeclass instances:

  • "Where is the Monad[IO] instance defined?"
  • "Which library provides Encoder[LocalDateTime]?"
  • "What instances are available for Show?"

Proposed Solution

New Tool: find_typeclass_instances

{
  "name": "find_typeclass_instances",
  "description": "Find typeclass instances for a type",
  "input": {
    "coordinates": "Maven/Coursier coordinates",
    "typeclass": "Typeclass name (e.g., Monad, Encoder)",
    "forType": "optional, type to find instance for",
    "scalaVersion": "optional"
  }
}

Example 1: Find instances of a typeclass

find_typeclass_instances("org.typelevel::cats-core:2.10.0", "Monad")

Returns:

{
  "typeclass": "cats.Monad",
  "instances": [
    {"forType": "Option", "location": "cats.instances.option._", "import": "import cats.implicits._"},
    {"forType": "List", "location": "cats.instances.list._", "import": "import cats.implicits._"},
    {"forType": "Either[E, *]", "location": "cats.instances.either._", "import": "import cats.implicits._"}
  ]
}

Example 2: Find instances for a specific type

find_typeclass_instances("io.circe::circe-core:0.14.6", "Encoder", forType="java.time.LocalDate")

Returns:

{
  "typeclass": "io.circe.Encoder",
  "forType": "java.time.LocalDate",
  "instances": [
    {
      "location": "io.circe.java8.time._",
      "import": "import io.circe.java8.time._",
      "artifact": "io.circe::circe-java8:0.14.6",
      "note": "Requires additional dependency"
    }
  ]
}

Implementation

  • Parse companion objects for given/implicit definitions
  • Scan package objects for instances
  • Use TASTy for accurate type information
  • Build index of typeclass → instances

Value for Agent

  • Knows where to get missing instances
  • Discovers required imports
  • Finds instances in separate artifacts

Acceptance Criteria

  • Find instances defined in companion objects
  • Find instances in package objects
  • Include required import statement
  • Note if instance requires additional dependency
## Problem Agent needs to know where to find typeclass instances: - "Where is the `Monad[IO]` instance defined?" - "Which library provides `Encoder[LocalDateTime]`?" - "What instances are available for `Show`?" ## Proposed Solution ### New Tool: `find_typeclass_instances` ```json { "name": "find_typeclass_instances", "description": "Find typeclass instances for a type", "input": { "coordinates": "Maven/Coursier coordinates", "typeclass": "Typeclass name (e.g., Monad, Encoder)", "forType": "optional, type to find instance for", "scalaVersion": "optional" } } ``` **Example 1: Find instances of a typeclass** ``` find_typeclass_instances("org.typelevel::cats-core:2.10.0", "Monad") ``` **Returns:** ```json { "typeclass": "cats.Monad", "instances": [ {"forType": "Option", "location": "cats.instances.option._", "import": "import cats.implicits._"}, {"forType": "List", "location": "cats.instances.list._", "import": "import cats.implicits._"}, {"forType": "Either[E, *]", "location": "cats.instances.either._", "import": "import cats.implicits._"} ] } ``` **Example 2: Find instances for a specific type** ``` find_typeclass_instances("io.circe::circe-core:0.14.6", "Encoder", forType="java.time.LocalDate") ``` **Returns:** ```json { "typeclass": "io.circe.Encoder", "forType": "java.time.LocalDate", "instances": [ { "location": "io.circe.java8.time._", "import": "import io.circe.java8.time._", "artifact": "io.circe::circe-java8:0.14.6", "note": "Requires additional dependency" } ] } ``` ## Implementation - Parse companion objects for `given`/`implicit` definitions - Scan package objects for instances - Use TASTy for accurate type information - Build index of typeclass → instances ## Value for Agent - Knows where to get missing instances - Discovers required imports - Finds instances in separate artifacts ## Acceptance Criteria - [ ] Find instances defined in companion objects - [ ] Find instances in package objects - [ ] Include required import statement - [ ] Note if instance requires additional dependency
Sign in to join this conversation.
No description provided.