{"id":42559488,"url":"https://github.com/martianoff/gala","last_synced_at":"2026-04-25T06:13:18.478Z","repository":{"id":334475657,"uuid":"1127142823","full_name":"martianoff/gala","owner":"martianoff","description":"GALA (Go Alternative LAnguage) -- a modern functional programming language that transpiles to Go. Sealed types, pattern matching, immutability by default, monads (Option, Either, Try, Future), and full Go interop. Built with Go, ANTLR4, Bazel and Claude.","archived":false,"fork":false,"pushed_at":"2026-04-17T03:11:21.000Z","size":4853,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-17T04:03:20.989Z","etag":null,"topics":["algebraic-data-types","bazel","compiler","compilers","functional-programming","gala","go","golang","hacktoberfest","immutability","language","language-design","monads","pattern-matching","programming-language","scala","sealed-types","transpiler","type-inference"],"latest_commit_sha":null,"homepage":"https://gala.fyi/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/martianoff.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":"CONTRIBUTING.MD","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-03T09:13:25.000Z","updated_at":"2026-04-17T02:51:47.000Z","dependencies_parsed_at":"2026-04-17T04:01:39.553Z","dependency_job_id":null,"html_url":"https://github.com/martianoff/gala","commit_stats":null,"previous_names":["martianoff/gala"],"tags_count":72,"template":false,"template_full_name":null,"purl":"pkg:github/martianoff/gala","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martianoff%2Fgala","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martianoff%2Fgala/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martianoff%2Fgala/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martianoff%2Fgala/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/martianoff","download_url":"https://codeload.github.com/martianoff/gala/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martianoff%2Fgala/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32126709,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T07:37:52.372Z","status":"ssl_error","status_checked_at":"2026-04-22T07:37:51.635Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algebraic-data-types","bazel","compiler","compilers","functional-programming","gala","go","golang","hacktoberfest","immutability","language","language-design","monads","pattern-matching","programming-language","scala","sealed-types","transpiler","type-inference"],"created_at":"2026-01-28T20:05:16.471Z","updated_at":"2026-04-22T08:01:35.718Z","avatar_url":"https://github.com/martianoff.png","language":"Go","readme":"# GALA\n\n[![Build](https://github.com/martianoff/gala/actions/workflows/test.yml/badge.svg)](https://github.com/martianoff/gala/actions/workflows/test.yml)\n[![Release](https://github.com/martianoff/gala/actions/workflows/release.yml/badge.svg)](https://github.com/martianoff/gala/releases)\n[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/martianoff/gala?sort=semver)](https://github.com/martianoff/gala/releases/latest)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)\n[![Go](https://img.shields.io/badge/Go-1.25+-00ADD8?logo=go\u0026logoColor=white)](https://go.dev)\n[![Bazel](https://img.shields.io/badge/Built%20with-Bazel-43A047)](https://bazel.build)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.MD)\n\n\u003cimg alt=\"GALA Logo\" height=\"384\" src=\"gala_escape.png\" width=\"700\"/\u003e\n\n**GALA** (Go Alternative LAnguage) is a modern programming language that transpiles to Go. It brings sealed types, pattern matching, immutability by default, and functional collections to the Go ecosystem -- without sacrificing Go's performance, tooling, or library compatibility.\n\n**[Try GALA in your browser!](https://gala-playground.fly.dev)**\n\n```gala\nsealed type Shape {\n    case Circle(Radius float64)\n    case Rectangle(Width float64, Height float64)\n}\n\nfunc area(s Shape) string = s match {\n    case Circle(r)       =\u003e f\"circle area: ${3.14159 * r * r}%.2f\"\n    case Rectangle(w, h) =\u003e f\"rect area: ${w * h}%.2f\"\n}\n```\n\n---\n\n## What is GALA?\n\nGALA gives you Scala-like expressiveness -- sealed types, exhaustive pattern matching, `Option[T]`/`Either[A,B]`/`Try[T]` monads, immutable collections -- in a concise, readable syntax that compiles to a single native binary. GALA is fully Go-compatible: every Go library works out of the box.\n\n---\n\n## Key Features\n\n**Sealed types and exhaustive pattern matching** -- Define closed type hierarchies. The compiler rejects incomplete matches.\n\n```gala\nsealed type Result[T any] {\n    case Ok(Value T)\n    case Err(Message string)\n}\n\nval msg = result match {\n    case Ok(v)    =\u003e s\"got $v\"\n    case Err(msg) =\u003e s\"error: $msg\"\n}\n```\n\n**Immutability by default** -- `val` and `:=` are immutable. Structs auto-generate `Copy()` and `Equal()`.\n\n```gala\nstruct Config(Host string, Port int)\nval updated = config.Copy(Port = 8080)\n```\n\n**Expression functions** -- Single-expression functions skip braces and `return`.\n\n```gala\nfunc square(x int) int = x * x\nfunc max(a int, b int) int = if (a \u003e b) a else b\n```\n\n**Default parameters and named arguments** -- Skip boilerplate. Defaults are evaluated at each call site; named arguments can appear in any order.\n\n```gala\nfunc connect(host string, port int = 8080, tls bool = true) Connection\n\nconnect(\"localhost\")                  // port=8080, tls=true\nconnect(\"localhost\", tls = false)     // port=8080, tls=false\nconnect(host = \"db\", port = 5432)     // tls=true\n```\n\n**Lambda type inference** -- Parameter types and method type parameters are inferred from context.\n\n```gala\nval list = ListOf(1, 2, 3)\nval doubled = list.Map((x) =\u003e x * 2)\nval sum = list.FoldLeft(0, (acc, x) =\u003e acc + x)\n```\n\n**Monads** -- `Option[T]`, `Either[A,B]`, `Try[T]`, `Future[T]` with `Map`, `FlatMap`, `Recover`, and pattern matching.\n\n```gala\nval name = user.Name\n    .Map((n) =\u003e strings.ToUpper(n))\n    .GetOrElse(\"ANONYMOUS\")\n```\n\n**Functional collections** -- Immutable `List`, `Array`, `HashMap`, `HashSet`, `TreeSet`, `TreeMap` with `Map`, `Filter`, `FoldLeft`, `Collect`, and more.\n\n```gala\nval nums = ArrayOf(1, 2, 3, 4, 5)\nval evens = nums.Filter((x) =\u003e x % 2 == 0)\nval evenDoubled = nums.Collect({ case n if n % 2 == 0 =\u003e n * 2 })\n```\n\n**Tuples with destructuring** -- Up to Tuple5, with pattern matching and concise syntax.\n\n```gala\nval pair = (1, \"hello\")\nval (x, y) = pair\n```\n\n**Read-only pointers** -- `ConstPtr[T]` prevents accidental mutation through pointers.\n\n```gala\nval data = 42\nval ptr = \u0026data       // ConstPtr[int], not *int\nval value = *ptr      // OK: read\n// *ptr = 100         // compile error: cannot write through ConstPtr\n```\n\n**String interpolation** -- `s\"...\"` with auto-inferred format verbs and `f\"...\"` with explicit format specs. No imports needed.\n\n```gala\nval name = \"Alice\"\nval age = 30\nPrintln(s\"$name is $age years old\")       // Alice is 30 years old\nPrintln(f\"Pi = ${3.14159}%.2f\")           // Pi = 3.14\nPrintln(s\"${nums.MkString(\", \")}\")        // 1, 2, 3\n```\n\n**Zero-reflection JSON codec** -- `Codec[T]` uses the compiler-generated `StructMeta[T]` intrinsic for fully typed serialization with no reflection, no struct tags, and pattern matching support.\n\n```gala\nstruct Person(FirstName string, LastName string, Age int)\n\nval codec = Codec[Person](SnakeCase())\nval jsonStr = codec.Encode(Person(\"Alice\", \"Smith\", 30)).Get()\n// {\"first_name\":\"Alice\",\"last_name\":\"Smith\",\"age\":30}\n\nval decoded = codec.Decode(jsonStr)       // Try[Person]\nval name = jsonStr match {\n    case codec(p) =\u003e p.FirstName          // pattern matching!\n    case _        =\u003e \"unknown\"\n}\n```\n\n**Regex with pattern matching** -- Compile-safe regex with extractors that destructure capture groups directly in `match`.\n\n```gala\nval dateRegex = regex.MustCompile(\"(\\\\d{4})-(\\\\d{2})-(\\\\d{2})\")\n\n\"2024-01-15\" match {\n    case dateRegex(Array(year, month, day)) =\u003e s\"$year/$month/$day\"\n    case _ =\u003e \"not a date\"\n}\n```\n\n**Full Go interop** -- Use any Go library. Go function return types are automatically inferred from the Go SDK, and multi-return `(T, error)` patterns are wrapped into `Try[T]`.\n\n**Fast compilation** -- Analysis caching and batch transpilation make multi-file packages compile up to 16x faster. Profile bottlenecks with `GALA_PROFILE=1`.\n\n---\n\n## Quick Start\n\n**New to GALA?** Try it instantly in the [browser playground](https://gala-playground.fly.dev) — no install. Or follow the full [Getting Started guide](https://martianoff.github.io/gala/getting-started/).\n\n### 1. Install\n\nDownload a pre-built binary from [Releases](https://github.com/martianoff/gala/releases), rename it to `gala` (or `gala.exe` on Windows), and add it to your `PATH`.\n\nGALA transpiles to Go, so it needs [Go 1.25+](https://go.dev/dl/) on your `PATH` to compile programs. Install Go first if you don't have it.\n\nOr build from source:\n\n```bash\ngit clone https://github.com/martianoff/gala.git \u0026\u0026 cd gala\nbazel build //cmd/gala:gala\n```\n\nVerify the install:\n\n```bash\ngala version\n```\n\n### 2. Create a project\n\n```bash\nmkdir hello \u0026\u0026 cd hello\ngala mod init example.com/hello\n```\n\nWrite `main.gala`:\n\n```gala\npackage main\n\nstruct Person(Name string, Age int)\n\nfunc greet(p Person) string = p match {\n    case Person(name, age) if age \u003c 18 =\u003e s\"Hey, $name!\"\n    case Person(name, _)               =\u003e s\"Hello, $name\"\n}\n\nfunc main() {\n    Println(greet(Person(\"Alice\", 25)))\n}\n```\n\n### 3. Run\n\n```bash\ngala run main.gala     # Transpile + compile + run\ngala build             # Build project to a binary\ngala test              # Run tests\n\n# Or with Bazel (for larger projects)\nbazel build //... \u0026\u0026 bazel test //...\n```\n\n**Need help?** Ask in [GitHub Discussions](https://github.com/martianoff/gala/discussions).\n\n---\n\n## GALA vs Go\n\n### Pattern Matching vs Switch\n\n\u003ctable\u003e\n\u003ctr\u003e\u003cth\u003eGALA\u003c/th\u003e\u003cth\u003eGo\u003c/th\u003e\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n```gala\nval msg = shape match {\n    case Circle(r)      =\u003e f\"r=$r%.1f\"\n    case Rectangle(w,h) =\u003e f\"$w%.0fx$h%.0f\"\n    case Point()        =\u003e \"point\"\n}\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n```go\nvar msg string\nswitch shape._variant {\ncase Shape_Circle:\n    msg = fmt.Sprintf(\"r=%.1f\", shape.Radius.Get())\ncase Shape_Rectangle:\n    msg = fmt.Sprintf(\"%fx%f\", shape.Width.Get(), shape.Height.Get())\ncase Shape_Point:\n    msg = \"point\"\n}\n```\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n### Option Handling vs nil Checks\n\n\u003ctable\u003e\n\u003ctr\u003e\u003cth\u003eGALA\u003c/th\u003e\u003cth\u003eGo\u003c/th\u003e\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n```gala\nval name = user.Name\n    .Map((n) =\u003e strings.ToUpper(n))\n    .GetOrElse(\"ANONYMOUS\")\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n```go\nname := \"ANONYMOUS\"\nif user.Name != nil {\n    name = strings.ToUpper(*user.Name)\n}\n```\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n### Immutable Structs vs Manual Copying\n\n\u003ctable\u003e\n\u003ctr\u003e\u003cth\u003eGALA\u003c/th\u003e\u003cth\u003eGo\u003c/th\u003e\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n```gala\nstruct Config(Host string, Port int)\nval updated = config.Copy(Port = 8080)\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n```go\ntype Config struct {\n    Host string\n    Port int\n}\nupdated := Config{Host: config.Host, Port: 8080}\n```\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n### Default Parameters vs Option Structs\n\n\u003ctable\u003e\n\u003ctr\u003e\u003cth\u003eGALA\u003c/th\u003e\u003cth\u003eGo\u003c/th\u003e\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n```gala\nfunc connect(\n    host string,\n    port int = 8080,\n    tls bool = true,\n) Connection\n\nconnect(\"localhost\", tls = false)\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n```go\ntype ConnectOptions struct {\n    Host string\n    Port int\n    TLS  *bool\n}\n\nfunc Connect(opts ConnectOptions) Connection {\n    if opts.Port == 0 { opts.Port = 8080 }\n    if opts.TLS == nil {\n        t := true; opts.TLS = \u0026t\n    }\n    // ...\n}\nConnect(ConnectOptions{Host: \"localhost\", TLS: ptrBool(false)})\n```\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n### Error Handling: Try vs if-err\n\n\u003ctable\u003e\n\u003ctr\u003e\u003cth\u003eGALA\u003c/th\u003e\u003cth\u003eGo\u003c/th\u003e\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n```gala\nval result = divide(10, 2)\n    .Map((x) =\u003e x * 2)\n    .FlatMap((x) =\u003e divide(x, 3))\n    .Recover((e) =\u003e 0)\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n```go\nresult, err := divide(10, 2)\nif err != nil {\n    result = 0\n} else {\n    result = result * 2\n    result, err = divide(result, 3)\n    if err != nil {\n        result = 0\n    }\n}\n```\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n## Standard Library\n\n### Types\n\n| Type | Description |\n|------|-------------|\n| `Option[T]` | Optional values -- `Some(value)` / `None()` |\n| `Either[A, B]` | Disjoint union -- `Left(a)` / `Right(b)` |\n| `Try[T]` | Failable computation -- `Success(value)` / `Failure(err)` |\n| `Future[T]` | Async computation with `Map`, `FlatMap`, `Zip`, `Await` |\n| `Tuple[A, B]` | Pairs and triples with `(a, b)` syntax |\n| `ConstPtr[T]` | Read-only pointer with auto-deref field access |\n| `IO[T]` | Lazy, composable effect type -- `Suspend`, `Map`, `FlatMap`, `Recover` |\n\n### JSON, Regex, IO\n\n| Type | Description |\n|------|-------------|\n| `Codec[T]` | Zero-reflection JSON codec with `Encode`, `Decode`, `Rename`, `Omit`, pattern matching |\n| `Regex` | Compiled regex with `Matches`, `FindFirst`, `FindAll`, `ReplaceAll`, pattern matching |\n| `IO[T]` | Lazy effect -- separates description from execution, re-runs on every `.Run()` |\n\n### Collections\n\n| Type | Kind | Key Operations | Best for |\n|------|------|----------------|----------|\n| `List[T]` | Immutable | O(1) prepend, O(n) index | Recursive processing, prepend-heavy workloads |\n| `Array[T]` | Immutable | O(1) random access | General-purpose indexed sequences |\n| `HashMap[K,V]` | Immutable | O(1) lookup | Functional key-value storage |\n| `HashSet[T]` | Immutable | O(1) membership | Unique element collections |\n| `TreeSet[T]` | Immutable | O(log n) sorted ops | Ordered unique elements, range queries |\n| `TreeMap[K,V]` | Immutable | O(log n) sorted ops | Sorted key-value storage, range queries |\n\nAll collections support `Map`, `Filter`, `FoldLeft`, `ForEach`, `Exists`, `Find`, `Collect`, `MkString`, `Sorted`, `SortWith`, `SortBy`, and more.\n\n`TreeMap[K,V]` is a Red-Black tree that maintains entries in sorted key order. It provides `MinKey`, `MaxKey`, `Range(from, to)`, `RangeFrom`, `RangeTo`, and conversion to `HashMap`, Go maps, or sorted arrays.\n\nMutable variants of all collection types are available in `collection_mutable` for performance-sensitive code.\n\n---\n\n## Showcase\n\n| Project | Description |\n|---------|-------------|\n| [GALA Playground](https://github.com/martianoff/gala-playground) | Web-based playground ([try it live](https://gala-playground.fly.dev)) -- write and run GALA code in the browser with 9 built-in examples |\n| [State Machine Example](https://github.com/martianoff/gala-state-machine-example) | State machines with sealed types + pattern matching -- order FSM, traffic light, vending machine (with Go comparison) |\n| [Log Analyzer](https://github.com/martianoff/gala-log-analyzer) | Structured log parsing with Go stdlib interop (strings, strconv, fmt) + functional pipelines (FoldLeft, Filter, AppendAll) (with Go comparison) |\n| [GALA Server](https://github.com/martianoff/gala-server) | Immutable HTTP server library with builder-pattern configuration, route groups, filters, and pattern matching -- written entirely in GALA |\n\n---\n\n## Dependency Management\n\n```bash\ngala mod init github.com/user/project\ngala mod add github.com/example/utils@v1.2.3\ngala mod add github.com/google/uuid@v1.6.0 --go\ngala mod tidy\n```\n\n---\n\n## IDE Support\n\nGALA ships with a GoLand/IntelliJ plugin and an LSP server (`gala lsp`) for editor-agnostic support.\n\n### GoLand / IntelliJ IDEA\n\n1. Install GALA CLI: Download from [releases](https://github.com/martianoff/gala/releases) and add to PATH\n2. Install plugin: GoLand \u003e Settings \u003e Plugins \u003e Install from Disk \u003e select `gala-intellij-plugin.zip` from [releases](https://github.com/martianoff/gala/releases)\n3. Restart GoLand — the LSP server starts automatically when a `.gala` file is opened\n\n#### Plugin Features (local, no LSP needed)\n\n- Full ANTLR-based parser with complete PSI tree\n- Syntax highlighting (keywords, types, strings, comments, operators, built-in functions, std types)\n- Semantic annotator (built-in types, std types, built-in functions, string interpolation)\n- Code folding (blocks, sealed types, imports)\n- Brace matching\n- Structure view (functions, types, sealed types with cases)\n- Comment/uncomment\n- 12 live templates (`func`, `val`, `var`, `match`, `if`, `for`, `sealed`, `struct`, `lambda`, `main`, `println`, `sinterp`)\n- Color settings page\n\n#### LSP Features (via `gala lsp`)\n\n- Real-time diagnostics (parse errors, transpilation errors, unused variables, match exhaustiveness)\n- Hover (type signatures with fields, methods, sealed cases, built-in function docs)\n- Go to Definition (cross-file via analyzer metadata, local declarations, pattern bindings, named arg fields)\n- Find References (same-file occurrences)\n- Completion (type-aware dot completion, named arg fields, sealed case patterns with destructuring, keywords, built-ins)\n- Inlay hints (type inference from transpiler's VarTypes for all declarations)\n- Document symbols (types, functions, sealed variants)\n- Debounced analysis (500ms) to prevent noise while typing\n\n### VS Code\n\nAdd to `.vscode/settings.json`:\n\n```json\n{\n  \"lsp.servers\": {\n    \"gala\": {\n      \"command\": \"gala\",\n      \"args\": [\"lsp\"],\n      \"filetypes\": [\"gala\"]\n    }\n  }\n}\n```\n\n### Neovim\n\n```lua\nrequire('lspconfig.configs').gala = {\n  default_config = {\n    cmd = { 'gala', 'lsp' },\n    filetypes = { 'gala' },\n    root_dir = require('lspconfig.util').root_pattern('gala.mod', '.git'),\n  },\n}\nrequire('lspconfig').gala.setup({})\n```\n\n---\n\n## Installation\n\n### Pre-built Binaries\n\nDownload from [Releases](https://github.com/martianoff/gala/releases):\n\n| Platform | Binary |\n|----------|--------|\n| Linux (x64) | `gala-linux-amd64` |\n| Linux (ARM64) | `gala-linux-arm64` |\n| macOS (x64) | `gala-darwin-amd64` |\n| macOS (Apple Silicon) | `gala-darwin-arm64` |\n| Windows (x64) | `gala-windows-amd64.exe` |\n\nAfter downloading, rename the binary to `gala` (or `gala.exe` on Windows) and add it to your `PATH`.\n\n**Prerequisite:** GALA needs [Go 1.25+](https://go.dev/dl/) on your `PATH` to compile programs. Install Go before running `gala build` or `gala run`.\n\n### Build from Source\n\n```bash\ngit clone https://github.com/martianoff/gala.git\ncd gala\nbazel build //cmd/gala:gala\n```\n\n### Using Bazel (Recommended)\n\n```python\nload(\"//:gala.bzl\", \"gala_binary\", \"gala_library\")\n\ngala_binary(\n    name = \"myapp\",\n    src = \"main.gala\",\n)\n```\n\n---\n\n## Documentation\n\n- [Language Specification](docs/GALA.MD) -- Complete language reference\n- [Why GALA?](docs/WHY_GALA.MD) -- Feature deep-dive and honest trade-offs\n- [Examples](docs/EXAMPLES.MD) -- Code examples for all features\n- [Type Inference](docs/TYPE_INFERENCE.MD) -- How type inference works\n- [JSON Codec](https://martianoff.github.io/gala/json/) -- Zero-reflection JSON serialization\n- [Regex](https://martianoff.github.io/gala/regex/) -- Pattern matching with regex extractors\n- [IO Effect](https://martianoff.github.io/gala/io/) -- Lazy, composable side effects\n- [Go Interop](https://martianoff.github.io/gala/go-interop/) -- Seamless Go library integration\n- [Concurrent](docs/CONCURRENT.MD) -- Future, Promise, and ExecutionContext\n- [Stream](docs/STREAM.MD) -- Lazy, potentially infinite sequences\n- [Immutable Collections](docs/IMMUTABLE_COLLECTIONS.MD) -- List, Array, HashMap, HashSet, TreeSet, TreeMap\n- [Mutable Collections](docs/MUTABLE_COLLECTIONS.MD) -- Mutable variants for performance\n- [String Utils](docs/STRING_UTILS.MD) -- Rich string operations\n- [Time Utils](docs/TIME_UTILS.MD) -- Duration and Instant types\n- [Dependency Management](docs/DEPENDENCY_MANAGEMENT.MD) -- Module system\n\n---\n\n## Contributing\n\nContributions are welcome. Please ensure:\n\n1. `bazel build //...` passes\n2. `bazel test //...` passes\n3. New features include examples in `examples/`\n4. Documentation is updated for grammar/feature changes\n\n---\n\n## License\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)\n\nApache License 2.0. See [LICENSE](LICENSE) for details.\n","funding_links":[],"categories":["Uncategorized"],"sub_categories":["Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartianoff%2Fgala","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmartianoff%2Fgala","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartianoff%2Fgala/lists"}