Avatar ·

Qual é a diferença entre traits em Rust e typeclasses em Haskell?

Olá, colegas! Comecei a estudar Rust depois de Haskell e notei que os traits em Rust são muito semelhantes às typeclasses em Haskell. À primeira vista, eles resolvem o mesmo problema — permitem definir comportamento comum para diferentes tipos. Mas sinto que existem diferenças fundamentais entre eles que ainda não consigo articular claramente. Por exemplo, em Haskell posso escrever: ```haskell class Show a where show :: a -> String instance Show Int where show x = "Int: " ++ show x ``` E em Rust, o análogo fica assim: ```rust trait Show { fn show(&self) -> String; } impl Show for i32 { fn show(&self) -> String { format!("i32: {}", self) } } ``` Parece semelhante, mas noto algumas coisas: 1. Em Haskell, as typeclasses podem ter múltiplos parâmetros (por exemplo, `class Convert a b`), enquanto em Rust os traits parecem estar sempre vinculados a um único tipo. 2. Em Haskell existe `deriving`, que gera automaticamente implementações para alguns