unify (subst s1 ta2) (subst s1 tb2) >>= \s2->
Right $ compose s2 s1
unify (TupleType (ta1,ta2)) (TupleType (tb1,tb2)) = unify ta1 tb1 >>= \s1->
- unify ta2 tb2 >>= \s2->
+ unify (subst s1 ta2) (subst s1 tb2) >>= \s2->
Right $ compose s2 s1
unify (ListType t1) (ListType t2) = unify t1 t2
unify (FuncType t1) (FuncType t2) = unify t1 t2
reverseFs :: Type FieldSelector -> Typing Type
reverseFs t FieldHd = pure $ ListType t
-reverseFs t FieldTl = pure $ ListType t
+reverseFs t FieldTl = pure t
reverseFs t FieldFst = fresh >>= \tv -> pure $ TupleType (t, tv)
reverseFs t FieldSnd = fresh >>= \tv -> pure $ TupleType (tv, t)