TLang.Map

TLang.Map provides string-keyed dictionaries. Maps are persistent — operations return new maps. Higher-order functions work as free functions or dot-method calls.

    use TLang.Map
  

Creating Maps

      let m  = Map.of("host", "localhost", "port", "5432")    // from pairs
      let m2 = Map.create()                                    // empty map
    

Access and Info

      let v  = Map.get(m, "host")                        // value or error if missing
      let v2 = Map.getOrDefault(m, "port", "3306")       // value or default
      let ok = Map.has(m, "host")                        // Bool
      let n  = Map.size(m)                               // count
      let e  = Map.isEmpty(m)                            // Bool
    

Adding and Removing

      let m2 = Map.set(m, "port", "5433")        // add or update
      let m3 = Map.remove(m, "host")             // remove key
    

Keys, Values, and Entries

      let keys    = Map.keys(m)       // List of String
      let values  = Map.values(m)     // List of values
      let entries = Map.entries(m)    // List of {key, value} maps
    

Combining Maps

      let merged   = Map.merge(m1, m2)              // m2 values win on conflict
      let fromLists = Map.fromLists(keys, values)   // zip two lists into a map
      let asList   = Map.toList(m)                  // List of {key, value} maps
    

Higher-Order Functions

      // mapValues — transform each value
      let upper = Map.mapValues(m, (k, v) => v.toUpperCase())
      let upper = m.mapValues((k, v) => v.toUpperCase())

      // filterKeys — keep by key predicate
      let sub = Map.filterKeys(m, (k) => k.startsWith("db_"))

      // filterValues — keep by key+value predicate
      let sub = Map.filterValues(m, (k, v) => v != "")

      // forEach — side effect per entry
      Map.forEach(m, (k, v) => Terminal.println(k + " = " + v))

      // reduce — fold over entries
      let csv = Map.reduce(m, "", (acc, k, v) => acc + k + "=" + v + "\n")
    

Example — Config Map

      use TLang.Map
      use TLang.List

      func toEnvFile(config: Map): String {
          let keys   = Map.keys(config)
          let result = ""
          for (k in keys) {
              let v      = Map.get(config, k)
              let result = result + k + "=" + v + "\n"
          }
          return result
      }

      func main(): String {
          let config = Map.of(
              "DB_HOST", "localhost",
              "DB_PORT", "5432",
              "DB_NAME", "myapp"
          )
          let env = toEnvFile(config)
          File.write(".env", env, true)
          return "done"
      }