diff --git a/syntax/mangled.rs b/syntax/mangled.rs
index a89060d..f52aa43 100644
--- a/syntax/mangled.rs
+++ b/syntax/mangled.rs
@@ -1,31 +1,25 @@
 use crate::syntax::namespace::Namespace;
 use crate::syntax::{Atom, Type};
 
-pub trait ToMangled {
-    fn to_mangled(&self, namespace: &Namespace) -> String;
-}
-
-impl ToMangled for Type {
-    fn to_mangled(&self, namespace: &Namespace) -> String {
-        match self {
-            Type::Ident(ident) => {
-                let mut instance = String::new();
-                // Do not apply namespace to built-in type
-                let is_user_type = Atom::from(ident).is_none();
-                if is_user_type {
-                    for name in namespace {
-                        instance += name;
-                        instance += "$";
-                    }
+pub fn to_mangled(namespace: &Namespace, ty: &Type) -> String {
+    match ty {
+        Type::Ident(ident) => {
+            let mut instance = String::new();
+            // Do not apply namespace to built-in type
+            let is_user_type = Atom::from(ident).is_none();
+            if is_user_type {
+                for name in namespace {
+                    instance += name;
+                    instance += "$";
                 }
-                instance += &ident.to_string();
-                instance
             }
-            Type::RustBox(ptr) => format!("rust_box${}", ptr.inner.to_mangled(namespace)),
-            Type::RustVec(ptr) => format!("rust_vec${}", ptr.inner.to_mangled(namespace)),
-            Type::UniquePtr(ptr) => format!("std$unique_ptr${}", ptr.inner.to_mangled(namespace)),
-            Type::CxxVector(ptr) => format!("std$vector${}", ptr.inner.to_mangled(namespace)),
-            _ => unimplemented!(),
+            instance += &ident.to_string();
+            instance
         }
+        Type::RustBox(ptr) => format!("rust_box${}", to_mangled(namespace, &ptr.inner)),
+        Type::RustVec(ptr) => format!("rust_vec${}", to_mangled(namespace, &ptr.inner)),
+        Type::UniquePtr(ptr) => format!("std$unique_ptr${}", to_mangled(namespace, &ptr.inner)),
+        Type::CxxVector(ptr) => format!("std$vector${}", to_mangled(namespace, &ptr.inner)),
+        _ => unimplemented!(),
     }
 }
