diff --git a/src/unification_sugared.rs b/src/unification_sugared.rs
index 499e2f1..c3e631e 100644
--- a/src/unification_sugared.rs
+++ b/src/unification_sugared.rs
@@ -138,7 +138,17 @@ impl SugaredUnificationProblem {
             (SugaredTypeTerm::Seq{ seq_repr: lhs_seq_repr, items: lhs_items },
                 SugaredTypeTerm::Seq { seq_repr: rhs_seq_repr, items: rhs_items })
             => {
-                // todo: unify seq reprü
+                let mut new_addr = unification_pair.addr.clone();
+                new_addr.push(0);
+
+                if let Some(rhs_seq_repr) = rhs_seq_repr.as_ref() {
+                    if let Some(lhs_seq_repr) = lhs_seq_repr.as_ref() {
+                        let _seq_repr_ψ = self.eval_equation(SugaredUnificationPair { addr: new_addr.clone(), lhs: *lhs_seq_repr.clone(), rhs: *rhs_seq_repr.clone() })?;
+                    } else {
+                        return Err(SugaredUnificationError{ addr: new_addr, t1: unification_pair.lhs, t2: unification_pair.rhs });
+                    }
+                }
+
 
                 if lhs_items.len() == rhs_items.len() {
                     for (i, (lhs_ty, rhs_ty)) in lhs_items.into_iter().zip(rhs_items.into_iter()).enumerate()
@@ -155,7 +165,14 @@ impl SugaredUnificationProblem {
             (SugaredTypeTerm::Struct{ struct_repr: lhs_struct_repr, members: lhs_members },
                 SugaredTypeTerm::Struct{ struct_repr: rhs_struct_repr, members: rhs_members })
             => {
-                // todo: unify struct repr
+                let new_addr = unification_pair.addr.clone();
+                if let Some(rhs_struct_repr) = rhs_struct_repr.as_ref() {
+                    if let Some(lhs_struct_repr) = lhs_struct_repr.as_ref() {
+                        let _struct_repr_ψ = self.eval_subtype(SugaredUnificationPair { addr: new_addr.clone(), lhs: *lhs_struct_repr.clone(), rhs: *rhs_struct_repr.clone() })?;
+                    } else {
+                        return Err(SugaredUnificationError{ addr: new_addr.clone(), t1: unification_pair.lhs, t2: unification_pair.rhs });
+                    }
+                }
 
                 if lhs_members.len() == rhs_members.len() {
                     for (i,
@@ -176,7 +193,15 @@ impl SugaredUnificationProblem {
             (SugaredTypeTerm::Enum{ enum_repr: lhs_enum_repr, variants: lhs_variants },
                 SugaredTypeTerm::Enum{ enum_repr: rhs_enum_repr, variants: rhs_variants })
             => {
-                // todo: unify enum repr
+                let mut new_addr = unification_pair.addr.clone();
+                if let Some(rhs_enum_repr) = rhs_enum_repr.as_ref() {
+                    if let Some(lhs_enum_repr) = lhs_enum_repr.as_ref() {
+                        let _enum_repr_ψ = self.eval_subtype(SugaredUnificationPair { addr: new_addr.clone(), lhs: *lhs_enum_repr.clone(), rhs: *rhs_enum_repr.clone() })?;
+                    } else {
+                        return Err(SugaredUnificationError{ addr: new_addr, t1: unification_pair.lhs, t2: unification_pair.rhs });
+                    }
+                }
+
 
                 if lhs_variants.len() == rhs_variants.len() {
                     for (i,