newtype-pattern
Wrappa en existerande typ i en ny, distinkt typ utan runtime-overhead — så kompilatorn kan skilja på UserId(u64) och OrderId(u64).
Haskell-syntax: newtype UserId = UserId Int. Rust: struct UserId(u64); (tuple struct). Skiljer sig från type alias (type UserId = u64) genom att kompilatorn skapar ny typ — du kan inte av misstag skicka en order-id där en user-id förväntas. Kan implementera egna trait/typeclass-instanser. Zero-cost — kompilerar bort till samma kod som råa primitiva. Standard-teknik i Rust/Haskell/F# för "domain modeling" och att förhindra "primitive obsession".