Language Conversion Guide
Comprehensive patterns and strategies for converting code between programming languages.
Quick Navigation
Examples
Reference Guides
| File |
Content |
| reference/difficulty-matrix.md |
Conversion difficulty ratings |
| reference/type-system-mapping.md |
Primitives, composites, generics |
| reference/error-handling.md |
Error models, let-it-crash |
| reference/concurrency.md |
Async models, channels, goroutines |
| reference/dev-workflow-repl.md |
9th pillar, REPL patterns |
| reference/memory-ownership.md |
GC→ownership, borrowing |
| reference/evaluation-strategy.md |
Lazy vs eager patterns |
| reference/metaprogramming.md |
Macros, reflection, code gen |
| reference/type-system-translation.md |
Static↔dynamic, inference |
| reference/paradigm-translation.md |
OOP→FP, FP→FP |
| reference/serialization.md |
Library mapping, attributes |
| reference/typescript-patterns.md |
Type guards, mapped types |
| reference/hkt-type-classes.md |
HKTs, Functor, Monad |
| reference/async-patterns.md |
Cancellation, streams |
| reference/dependency-management.md |
Package ecosystems |
| reference/performance.md |
Pitfalls, benchmarking |
Gotchas
When to Use This Skill
- Converting code from one language to another
- Planning a language migration
- Understanding conversion challenges between languages
- Looking up type mappings or idiom translations
- Referencing error handling, concurrency, or async patterns across languages
- Learning about gotchas when converting between specific language families
This Skill Does NOT Cover
- Creating new conversion skills (see
meta-convert-dev)
- Language tutorials (see
lang-*-dev skills)
- Runtime interop/FFI (see language-specific interop skills)
Related Skills
meta-convert-dev - For creating new convert-X-Y skills
convert-* skills - Language-pair specific conversion skills
Core Conversion Methodology
The APTV Workflow
Every conversion follows: Analyze → Plan → Transform → Validate
┌─────────────────────────────────────────────────────────────┐
│ CONVERSION WORKFLOW │
├─────────────────────────────────────────────────────────────┤
│ 1. ANALYZE │ Understand source code structure │
│ │ • Parse and identify components │
│ │ • Map dependencies │
│ │ • Identify language-specific patterns │
├─────────────────────────────────────────────────────────────┤
│ 2. PLAN │ Design the target architecture │
│ │ • Create type mapping table │
│ │ • Identify idiom translations │
│ │ • Plan module/package structure │
├─────────────────────────────────────────────────────────────┤
│ 3. TRANSFORM │ Convert code systematically │
│ │ • Types and interfaces first │
│ │ • Core logic second │
│ │ • Adopt target idioms (don't transliterate)│
├─────────────────────────────────────────────────────────────┤
│ 4. VALIDATE │ Verify functional equivalence │
│ │ • Run original tests against new code │
│ │ • Property-based testing for edge cases │
│ │ • Performance comparison if relevant │
└─────────────────────────────────────────────────────────────┘
See also: FORMS.md for APTV phase checklists
Analyze Phase
Before writing any target code:
- Parse the source - Understand structure, not just syntax
- Identify components:
- Types/interfaces/classes
- Functions/methods
- Module boundaries
- External dependencies
- Note language-specific features:
- Generics usage
- Error handling patterns
- Async patterns
- Memory management approach
Plan Phase
Create explicit mappings before transforming. Use the templates in FORMS.md:
## Type Mapping Table
| Source (TypeScript) | Target (Rust) | Notes |
| ------------------- | ------------------ | ----------------- |
| `string` | `String` / `&str` | Owned vs borrowed |
| `number` | `i32` / `f64` | Specify precision |
| `T[]` | `Vec<T>` | Owned collection |
| `T \| null` | `Option<T>` | Nullable handling |
| `Promise<T>` | `Future<Output=T>` | Async handling |
See also: reference/type-system-mapping.md for complete mappings
Transform Phase
Golden Rule: Adopt target idioms, don't write "Source code in Target syntax"
// Source: TypeScript
function findUser(id: string): User | null {
const user = users.find((u) => u.id === id);
return user || null;
}
// BAD: Transliterated (TypeScript in Rust clothing)
fn find_user(id: String) -> Option<User> {
let user = users.iter().find(|u| u.id == id);
match user {
Some(u) => Some(u.clone()),
None => None,
}
}
// GOOD: Idiomatic Rust
fn find_user(id: &str) -> Option<&User> {
users.iter().find(|u| u.id == id)
}
See also: examples/idiom-translation.md for more patterns
Validate Phase
- Functional equivalence: Same inputs → same outputs
- Edge case coverage: Property-based tests
- Error behavior: Same error conditions trigger appropriately
- Performance baseline: Comparable or better performance
See also: FORMS.md for testing strategy checklist
The 8 Pillars of Conversion
Every comprehensive conversion addresses these domains:
| Pillar |
What to Convert |
Reference |
| 1. Module System |
Imports, exports, packages |
reference/type-system-mapping.md |
| 2. Error Handling |
Exceptions, Results, panics |
reference/error-handling.md |
| 3. Concurrency |
Async, threads, channels |
reference/concurrency.md |
| 4. Metaprogramming |
Decorators, macros, reflection |
reference/metaprogramming.md |
| 5. Zero/Default Values |
Nullability, defaults |
reference/type-system-mapping.md |
| 6. Serialization |
JSON, validation, schemas |
reference/serialization.md |
| 7. Build System |
Package managers, dependencies |
reference/dependency-management.md |
| 8. Testing |
Test frameworks, assertions |
FORMS.md |
The 9th Pillar: Dev Workflow
For REPL-centric languages (Clojure, Elixir, Haskell), add:
| Source |
Target |
Consideration |
| REPL-centric |
Compiled |
Document workflow changes |
| Hot reload |
Recompile |
Faster incremental builds |
| Live inspection |
Debugging |
Logger, debugger setup |
See also: reference/dev-workflow-repl.md
Quick Reference Tables
Type System Comparison
| Language |
Typing |
Null Safety |
Generics |
| TypeScript |
Static |
Optional (strict) |
Full |
| Python |
Dynamic |
None (runtime) |
Type hints |
| Rust |
Static |
Enforced (Option) |
Full |
| Go |
Static |
Nil pointers |
1.18+ |
| Elixir |
Dynamic |
nil atoms |
None |
| Haskell |
Static (HM) |
Enforced (Maybe) |
Full + HKT |
See also: tables/quick-reference.md for complete tables
Error Model Comparison
| Language |
Model |
Propagation |
| TypeScript |
Exceptions |
throw / try-catch |
| Python |
Exceptions |
raise / try-except |
| Rust |
Result type |
? operator |
| Go |
Error returns |
if err != nil |
| Elixir |
Pattern match |
{:ok, _} / {:error, _} |
| Haskell |
Either/Maybe |
Monadic bind |
See also: reference/error-handling.md
Concurrency Model Comparison
| Language |
Model |
Primitives |
| TypeScript |
Event loop |
Promises, async/await |
| Python |
Event loop |
asyncio, await |
| Rust |
Futures |
tokio, async/await |
| Go |
CSP |
Goroutines, channels |
| Elixir |
Actors |
Processes, GenServer |
| Erlang |
Actors |
Processes, mailboxes |
See also: reference/concurrency.md
Common Conversion Patterns
Null Handling
| Source |
Target Rust |
Pattern |
x ?? default |
x.unwrap_or(default) |
Default value |
x?.prop |
x.map(|v| v.prop) |
Optional chaining |
if (x != null) |
if let Some(v) = x |
Null check |
See also: examples/idiom-translation.md
Error Propagation
| Source |
Target |
Pattern |
throw new Error(msg) |
return Err(Error::new(msg)) |
Throw → Result |
try { } catch { } |
match result { Ok(_) => ..., Err(_) => ... } |
Try/catch → match |
| Rethrow |
? operator |
Propagate error |
See also: examples/error-handling.md
Collection Operations
| Source (JS/TS) |
Target (Rust) |
Notes |
.map(f) |
.iter().map(f) |
Lazy in Rust |
.filter(f) |
.iter().filter(f) |
Lazy in Rust |
.reduce(f, init) |
.iter().fold(init, f) |
Different arg order |
.find(f) |
.iter().find(f) |
Returns Option |
See also: tables/quick-reference.md
Decision Trees
When to Clone vs Borrow
Is the data needed after the function returns?
├─ NO → Borrow (&T)
└─ YES → Does caller need to keep using it?
├─ NO → Move (T)
└─ YES → Clone (.clone())
See also: FORMS.md for complete decision trees
GC → Ownership Strategy
Is this data shared across components?
├─ YES → Consider Arc<T> or Rc<T>
└─ NO → Single owner, use moves
Is this data mutated by multiple parts?
├─ YES → Arc<Mutex<T>> or channels
└─ NO → Immutable borrows (&T)
See also: reference/memory-ownership.md
Common Pitfalls
| Pitfall |
Wrong |
Right |
| Transliteration |
Write TypeScript in Rust syntax |
Write idiomatic Rust |
| Ignoring idioms |
Port class hierarchies to Rust |
Use enums and traits |
| 1:1 mapping |
Every function maps exactly |
Restructure as needed |
| Preserve inefficiency |
Port inefficient algorithms |
Optimize for target |
| Ignore conventions |
camelCase in Python |
snake_case (Python) |
See also: reference/gotchas/by-family.md
Testing Conversions
Testing Pyramid
┌───────────────┐
│ Integration │ Same API behavior
└───────────────┘
┌─────────────────────────┐
│ Property-Based │ Invariants hold
└─────────────────────────┘
┌───────────────────────────────────┐
│ Unit Tests │ Logic matches
└───────────────────────────────────┘
┌─────────────────────────────────────────┐
│ Input/Output Comparison │ Golden tests
└─────────────────────────────────────────┘
Golden Testing
- Generate test cases from original implementation
- Save as JSON fixtures
- Run converted code against same inputs
- Compare outputs
See also: FORMS.md for testing checklist
Language-Specific Quick Links
Converting FROM
Converting TO
References
Related Skills
meta-convert-dev - For creating new convert-X-Y skills
convert-typescript-rust - TypeScript → Rust conversion
convert-python-rust - Python → Rust conversion
convert-golang-rust - Go → Rust conversion
Language Skills
For language-specific fundamentals (not conversion):
lang-typescript-dev - TypeScript development patterns
lang-python-dev - Python development patterns
lang-rust-dev - Rust development patterns
lang-elixir-dev - Elixir development patterns
1---2name: meta-convert-guide3description: Guide for translating code between programming languages. Use when converting code from one language to another, planning language migrations, understanding conversion challenges, asking about type mappings, idiom translations, or referencing pattern mappings. Covers APTV workflow, type systems, error handling, concurrency, and language-specific gotchas.4---56# Language Conversion Guide78Comprehensive patterns and strategies for converting code between programming languages.910## Quick Navigation1112| Resource | Purpose |13| -------------------------------------------------------- | ------------------------------------- |14| [FORMS.md](./FORMS.md) | Templates, checklists, decision trees |15| [tables/quick-reference.md](./tables/quick-reference.md) | Condensed lookup tables |1617### Examples1819| File | Content |20| ---------------------------------------------------------------- | -------------------------------------------- |21| [examples/idiom-translation.md](./examples/idiom-translation.md) | Null handling, collections, pattern matching |22| [examples/error-handling.md](./examples/error-handling.md) | Exception→Result, error hierarchies |23| [examples/concurrency.md](./examples/concurrency.md) | Promise/Future, parallel execution |24| [examples/metaprogramming.md](./examples/metaprogramming.md) | Decorators, macros, DI patterns |25| [examples/serialization.md](./examples/serialization.md) | JSON, validation, polymorphic types |2627### Reference Guides2829| File | Content |30| ------------------------------------------------------------------------------ | ---------------------------------- |31| [reference/difficulty-matrix.md](./reference/difficulty-matrix.md) | Conversion difficulty ratings |32| [reference/type-system-mapping.md](./reference/type-system-mapping.md) | Primitives, composites, generics |33| [reference/error-handling.md](./reference/error-handling.md) | Error models, let-it-crash |34| [reference/concurrency.md](./reference/concurrency.md) | Async models, channels, goroutines |35| [reference/dev-workflow-repl.md](./reference/dev-workflow-repl.md) | 9th pillar, REPL patterns |36| [reference/memory-ownership.md](./reference/memory-ownership.md) | GC→ownership, borrowing |37| [reference/evaluation-strategy.md](./reference/evaluation-strategy.md) | Lazy vs eager patterns |38| [reference/metaprogramming.md](./reference/metaprogramming.md) | Macros, reflection, code gen |39| [reference/type-system-translation.md](./reference/type-system-translation.md) | Static↔dynamic, inference |40| [reference/paradigm-translation.md](./reference/paradigm-translation.md) | OOP→FP, FP→FP |41| [reference/serialization.md](./reference/serialization.md) | Library mapping, attributes |42| [reference/typescript-patterns.md](./reference/typescript-patterns.md) | Type guards, mapped types |43| [reference/hkt-type-classes.md](./reference/hkt-type-classes.md) | HKTs, Functor, Monad |44| [reference/async-patterns.md](./reference/async-patterns.md) | Cancellation, streams |45| [reference/dependency-management.md](./reference/dependency-management.md) | Package ecosystems |46| [reference/performance.md](./reference/performance.md) | Pitfalls, benchmarking |4748### Gotchas4950| File | Content |51| ---------------------------------------------------------------------- | ------------------------------------ |52| [reference/gotchas/by-family.md](./reference/gotchas/by-family.md) | OOP→FP, Dynamic→Static, GC→Ownership |53| [reference/gotchas/by-language.md](./reference/gotchas/by-language.md) | Python→Rust, TypeScript→Rust, etc. |5455---5657## When to Use This Skill5859- Converting code from one language to another60- Planning a language migration61- Understanding conversion challenges between languages62- Looking up type mappings or idiom translations63- Referencing error handling, concurrency, or async patterns across languages64- Learning about gotchas when converting between specific language families6566## This Skill Does NOT Cover6768- Creating new conversion skills (see `meta-convert-dev`)69- Language tutorials (see `lang-*-dev` skills)70- Runtime interop/FFI (see language-specific interop skills)7172## Related Skills7374- `meta-convert-dev` - For creating new `convert-X-Y` skills75- `convert-*` skills - Language-pair specific conversion skills7677---7879## Core Conversion Methodology8081### The APTV Workflow8283Every conversion follows: **Analyze → Plan → Transform → Validate**8485```asciidoc86┌─────────────────────────────────────────────────────────────┐87│ CONVERSION WORKFLOW │88├─────────────────────────────────────────────────────────────┤89│ 1. ANALYZE │ Understand source code structure │90│ │ • Parse and identify components │91│ │ • Map dependencies │92│ │ • Identify language-specific patterns │93├─────────────────────────────────────────────────────────────┤94│ 2. PLAN │ Design the target architecture │95│ │ • Create type mapping table │96│ │ • Identify idiom translations │97│ │ • Plan module/package structure │98├─────────────────────────────────────────────────────────────┤99│ 3. TRANSFORM │ Convert code systematically │100│ │ • Types and interfaces first │101│ │ • Core logic second │102│ │ • Adopt target idioms (don't transliterate)│103├─────────────────────────────────────────────────────────────┤104│ 4. VALIDATE │ Verify functional equivalence │105│ │ • Run original tests against new code │106│ │ • Property-based testing for edge cases │107│ │ • Performance comparison if relevant │108└─────────────────────────────────────────────────────────────┘109```110111> **See also:** [FORMS.md](./FORMS.md) for APTV phase checklists112113### Analyze Phase114115Before writing any target code:1161171. **Parse the source** - Understand structure, not just syntax1182. **Identify components**:119 - Types/interfaces/classes120 - Functions/methods121 - Module boundaries122 - External dependencies1233. **Note language-specific features**:124 - Generics usage125 - Error handling patterns126 - Async patterns127 - Memory management approach128129### Plan Phase130131Create explicit mappings before transforming. Use the templates in [FORMS.md](./FORMS.md):132133```markdown134## Type Mapping Table135136| Source (TypeScript) | Target (Rust) | Notes |137| ------------------- | ------------------ | ----------------- |138| `string` | `String` / `&str` | Owned vs borrowed |139| `number` | `i32` / `f64` | Specify precision |140| `T[]` | `Vec<T>` | Owned collection |141| `T \| null` | `Option<T>` | Nullable handling |142| `Promise<T>` | `Future<Output=T>` | Async handling |143```144145> **See also:** [reference/type-system-mapping.md](./reference/type-system-mapping.md) for complete mappings146147### Transform Phase148149**Golden Rule: Adopt target idioms, don't write "Source code in Target syntax"**150151```typescript152// Source: TypeScript153function findUser(id: string): User | null {154 const user = users.find((u) => u.id === id);155 return user || null;156}157```158159```rust160// BAD: Transliterated (TypeScript in Rust clothing)161fn find_user(id: String) -> Option<User> {162 let user = users.iter().find(|u| u.id == id);163 match user {164 Some(u) => Some(u.clone()),165 None => None,166 }167}168169// GOOD: Idiomatic Rust170fn find_user(id: &str) -> Option<&User> {171 users.iter().find(|u| u.id == id)172}173```174175> **See also:** [examples/idiom-translation.md](./examples/idiom-translation.md) for more patterns176177### Validate Phase1781791. **Functional equivalence**: Same inputs → same outputs1802. **Edge case coverage**: Property-based tests1813. **Error behavior**: Same error conditions trigger appropriately1824. **Performance baseline**: Comparable or better performance183184> **See also:** [FORMS.md](./FORMS.md) for testing strategy checklist185186---187188## The 8 Pillars of Conversion189190Every comprehensive conversion addresses these domains:191192| Pillar | What to Convert | Reference |193| -------------------------- | ------------------------------ | -------------------------------------------------------------------------- |194| 1. **Module System** | Imports, exports, packages | [reference/type-system-mapping.md](./reference/type-system-mapping.md) |195| 2. **Error Handling** | Exceptions, Results, panics | [reference/error-handling.md](./reference/error-handling.md) |196| 3. **Concurrency** | Async, threads, channels | [reference/concurrency.md](./reference/concurrency.md) |197| 4. **Metaprogramming** | Decorators, macros, reflection | [reference/metaprogramming.md](./reference/metaprogramming.md) |198| 5. **Zero/Default Values** | Nullability, defaults | [reference/type-system-mapping.md](./reference/type-system-mapping.md) |199| 6. **Serialization** | JSON, validation, schemas | [reference/serialization.md](./reference/serialization.md) |200| 7. **Build System** | Package managers, dependencies | [reference/dependency-management.md](./reference/dependency-management.md) |201| 8. **Testing** | Test frameworks, assertions | [FORMS.md](./FORMS.md) |202203### The 9th Pillar: Dev Workflow204205For REPL-centric languages (Clojure, Elixir, Haskell), add:206207| Source | Target | Consideration |208| --------------- | --------- | ------------------------- |209| REPL-centric | Compiled | Document workflow changes |210| Hot reload | Recompile | Faster incremental builds |211| Live inspection | Debugging | Logger, debugger setup |212213> **See also:** [reference/dev-workflow-repl.md](./reference/dev-workflow-repl.md)214215---216217## Quick Reference Tables218219### Type System Comparison220221| Language | Typing | Null Safety | Generics |222| ---------- | ----------- | ------------------- | ---------- |223| TypeScript | Static | Optional (`strict`) | Full |224| Python | Dynamic | None (runtime) | Type hints |225| Rust | Static | Enforced (`Option`) | Full |226| Go | Static | Nil pointers | 1.18+ |227| Elixir | Dynamic | nil atoms | None |228| Haskell | Static (HM) | Enforced (`Maybe`) | Full + HKT |229230> **See also:** [tables/quick-reference.md](./tables/quick-reference.md) for complete tables231232### Error Model Comparison233234| Language | Model | Propagation |235| ---------- | ------------- | -------------------------- |236| TypeScript | Exceptions | `throw` / `try-catch` |237| Python | Exceptions | `raise` / `try-except` |238| Rust | Result type | `?` operator |239| Go | Error returns | `if err != nil` |240| Elixir | Pattern match | `{:ok, _}` / `{:error, _}` |241| Haskell | Either/Maybe | Monadic bind |242243> **See also:** [reference/error-handling.md](./reference/error-handling.md)244245### Concurrency Model Comparison246247| Language | Model | Primitives |248| ---------- | ---------- | --------------------- |249| TypeScript | Event loop | Promises, async/await |250| Python | Event loop | asyncio, await |251| Rust | Futures | tokio, async/await |252| Go | CSP | Goroutines, channels |253| Elixir | Actors | Processes, GenServer |254| Erlang | Actors | Processes, mailboxes |255256> **See also:** [reference/concurrency.md](./reference/concurrency.md)257258---259260## Common Conversion Patterns261262### Null Handling263264| Source | Target Rust | Pattern |265| ---------------- | ---------------------- | ----------------- |266| `x ?? default` | `x.unwrap_or(default)` | Default value |267| `x?.prop` | `x.map(\|v\| v.prop)` | Optional chaining |268| `if (x != null)` | `if let Some(v) = x` | Null check |269270> **See also:** [examples/idiom-translation.md](./examples/idiom-translation.md)271272### Error Propagation273274| Source | Target | Pattern |275| ---------------------- | ---------------------------------------------- | ----------------- |276| `throw new Error(msg)` | `return Err(Error::new(msg))` | Throw → Result |277| `try { } catch { }` | `match result { Ok(_) => ..., Err(_) => ... }` | Try/catch → match |278| Rethrow | `?` operator | Propagate error |279280> **See also:** [examples/error-handling.md](./examples/error-handling.md)281282### Collection Operations283284| Source (JS/TS) | Target (Rust) | Notes |285| ------------------ | ----------------------- | ------------------- |286| `.map(f)` | `.iter().map(f)` | Lazy in Rust |287| `.filter(f)` | `.iter().filter(f)` | Lazy in Rust |288| `.reduce(f, init)` | `.iter().fold(init, f)` | Different arg order |289| `.find(f)` | `.iter().find(f)` | Returns Option |290291> **See also:** [tables/quick-reference.md](./tables/quick-reference.md)292293---294295## Decision Trees296297### When to Clone vs Borrow298299```300Is the data needed after the function returns?301├─ NO → Borrow (&T)302└─ YES → Does caller need to keep using it?303 ├─ NO → Move (T)304 └─ YES → Clone (.clone())305```306307> **See also:** [FORMS.md](./FORMS.md) for complete decision trees308309### GC → Ownership Strategy310311```312Is this data shared across components?313├─ YES → Consider Arc<T> or Rc<T>314└─ NO → Single owner, use moves315316Is this data mutated by multiple parts?317├─ YES → Arc<Mutex<T>> or channels318└─ NO → Immutable borrows (&T)319```320321> **See also:** [reference/memory-ownership.md](./reference/memory-ownership.md)322323---324325## Common Pitfalls326327| Pitfall | Wrong | Right |328| ------------------------- | ------------------------------- | --------------------- |329| **Transliteration** | Write TypeScript in Rust syntax | Write idiomatic Rust |330| **Ignoring idioms** | Port class hierarchies to Rust | Use enums and traits |331| **1:1 mapping** | Every function maps exactly | Restructure as needed |332| **Preserve inefficiency** | Port inefficient algorithms | Optimize for target |333| **Ignore conventions** | camelCase in Python | snake_case (Python) |334335> **See also:** [reference/gotchas/by-family.md](./reference/gotchas/by-family.md)336337---338339## Testing Conversions340341### Testing Pyramid342343```asciidoc344 ┌───────────────┐345 │ Integration │ Same API behavior346 └───────────────┘347 ┌─────────────────────────┐348 │ Property-Based │ Invariants hold349 └─────────────────────────┘350 ┌───────────────────────────────────┐351 │ Unit Tests │ Logic matches352 └───────────────────────────────────┘353┌─────────────────────────────────────────┐354│ Input/Output Comparison │ Golden tests355└─────────────────────────────────────────┘356```357358### Golden Testing3593601. Generate test cases from original implementation3612. Save as JSON fixtures3623. Run converted code against same inputs3634. Compare outputs364365> **See also:** [FORMS.md](./FORMS.md) for testing checklist366367---368369## Language-Specific Quick Links370371### Converting FROM372373| Source | Key Gotchas | Reference |374| ---------- | ---------------------------- | ----------------------------------------------------------------------------------- |375| Python | Duck typing, None everywhere | [reference/gotchas/by-language.md](./reference/gotchas/by-language.md#python--rust) |376| TypeScript | Optional properties, any | [reference/typescript-patterns.md](./reference/typescript-patterns.md) |377| Go | Zero values, nil | [reference/gotchas/by-language.md](./reference/gotchas/by-language.md#go--rust) |378| Java | Null, checked exceptions | [reference/gotchas/by-language.md](./reference/gotchas/by-language.md#java--rust) |379| Haskell | HKTs, laziness | [reference/hkt-type-classes.md](./reference/hkt-type-classes.md) |380| Elixir | Pattern matching, processes | [reference/gotchas/by-language.md](./reference/gotchas/by-language.md#elixir--rust) |381382### Converting TO383384| Target | Key Considerations | Reference |385| ------ | --------------------------- | ------------------------------------------------------------------------------ |386| Rust | Ownership, borrowing | [reference/memory-ownership.md](./reference/memory-ownership.md) |387| Go | Simplicity, explicit errors | [reference/error-handling.md](./reference/error-handling.md) |388| Python | Dynamic typing | [reference/type-system-translation.md](./reference/type-system-translation.md) |389| Elixir | Functional, BEAM | [reference/paradigm-translation.md](./reference/paradigm-translation.md) |390391---392393## References394395### Related Skills396397- `meta-convert-dev` - For creating new `convert-X-Y` skills398- `convert-typescript-rust` - TypeScript → Rust conversion399- `convert-python-rust` - Python → Rust conversion400- `convert-golang-rust` - Go → Rust conversion401402### Language Skills403404For language-specific fundamentals (not conversion):405406- `lang-typescript-dev` - TypeScript development patterns407- `lang-python-dev` - Python development patterns408- `lang-rust-dev` - Rust development patterns409- `lang-elixir-dev` - Elixir development patterns