Type System
TONL automatically selects optimal types to minimize token usage.
Automatic Type Detection
TONL analyzes your data and selects the smallest type that can safely represent each value:
typescript
{ id: 1 } // i8 (1 byte)
{ id: 1000 } // i16 (2 bytes)
{ id: 100000 } // i32 (4 bytes)
{ price: 19.99 } // f32 (4 bytes)Integer Types
i8 (8-bit Integer)
- Range: -128 to 127
- Use case: Small counters, status codes, ages
- Token cost: Lowest
i16 (16-bit Integer)
- Range: -32,768 to 32,767
- Use case: Product IDs, page numbers
- Token cost: Low
i32 (32-bit Integer)
- Range: -2,147,483,648 to 2,147,483,647
- Use case: Large IDs, timestamps
- Token cost: Medium
i64 (64-bit Integer)
- Range: ±9 quintillion
- Use case: Large database IDs, precise timestamps
- Token cost: Higher
Float Types
f32 (32-bit Float)
- Precision: ~7 decimal digits
- Use case: Prices, percentages, measurements
- Token cost: Medium
f64 (64-bit Float)
- Precision: ~15 decimal digits
- Use case: Scientific calculations, coordinates
- Token cost: Higher
String Type
str
- Variable length
- UTF-8 encoding
- Handles all text data
- Token cost: Based on length
Boolean Type
bool
- Values:
trueorfalse - Most compact representation
- Token cost: Minimal
Special Types
null
- Represents absence of value
- Preserved in conversion
- Token cost: Minimal
date
- ISO 8601 format
- Example:
2025-01-15 - Automatic detection
datetime
- ISO 8601 with time
- Example:
2025-01-15T14:30:00Z - Automatic detection
obj (Object)
- Nested objects
- Can be flattened
- Token cost: Variable
arr (Array)
- Preserved as-is
- Elements can be any type
- Token cost: Based on contents
Type Selection Logic
TONL determines types using this process:
- Sample Analysis: Examines all values in column
- Range Detection: Finds min/max for numbers
- Type Selection: Chooses smallest safe type
- Validation: Ensures all values fit
Type Optimization Example
Consider this data:
json
[
{"count": 5, "price": 29.99},
{"count": 120, "price": 149.50},
{"count": 3, "price": 9.99}
]TONL selects:
count: i8 (max value 120 fits in i8)price: f32 (decimal precision needed)
Result:
items[3]{count:i8,price:f32}:
5, 29.99
120, 149.50
3, 9.99Manual Type Override
While TONL optimizes automatically, you can influence behavior:
typescript
// Force larger type if values might grow
const data = [{ id: 100 }]; // Would be i8
// Add hint for future growth
const dataWithHint = [
{ id: 100 },
{ id: 32000 } // Forces i16
];Type Safety
TONL guarantees:
- No data loss during conversion
- Type consistency across all rows
- Automatic validation
- Round-trip fidelity
Performance Impact
Type selection affects:
Token Usage:
- Smaller types = fewer tokens
- Optimal selection crucial for savings
Processing Speed:
- Type detection is fast (<5ms for 1000 objects)
- Caching minimizes overhead
Memory:
- Minimal impact
- Schema stored once per collection
Best Practices
- Consistent Data: Keep values within predictable ranges
- Schema Stability: Avoid frequent type changes
- Batch Processing: Process similar objects together
- Type Awareness: Understand your data ranges