[BUGFIX: adapt type when applying substitution
martin.hofmann@uni-bamberg.de**20091007133305] hunk ./src/Syntax/Expressions.hs 387
-    apply u t@(TWildE _ _)     = return t
+    apply u t@(TWildE _ _)    = return t
hunk ./src/Syntax/Expressions.hs 389
-    apply u (TListE ts ty)        = liftM2 TListE (mapM (apply u) ts) (return ty)
-    apply u (TTupE ts ty)         = liftM2 TTupE (mapM (apply u) ts) (return ty)
-    apply u (TAppE a1 a2 ty)      = liftM3 TAppE (apply u a1) (apply u a2) (return ty)
-    apply u (TInfixE e1 op e2 ty) = 
-        do subs1 <- (apply u) e1 -- Monad juggling because of Maybe
-           subs2 <- (apply u) e2 -- Maybe (m a) ~~> m (Maybe a)
-           return $ TInfixE subs1 op subs2 ty
+    apply u t@(TListE [] _)   = return t
+    apply u (TListE ts _)        = do 
+        ts' <- (mapM (apply u) ts)
+        return $ TListE ts' $ mkListT . typeOf . head $ ts'
+    apply u (TTupE ts _)         = do 
+        ts' <- (mapM (apply u) ts)
+        return $ TTupE ts' $ mkTupT (map typeOf ts')
+    apply u (TAppE a1 a2 _)      = do
+        a1' <- apply u a1
+        a2' <- apply u a2
+        return $ TAppE a1' a2' $ AppT (typeOf a1') (typeOf a2')
+    apply u (TInfixE e1 op e2 _) = 
+        do e1' <- (apply u) e1 
+           e2' <- (apply u) e2 
+           return $ TInfixE e1' op e2' (foldAppT (typeOf op) [typeOf e1', typeOf e2'])
hunk ./src/Syntax/Expressions.hs 844
+              (AppT ListT (AppT ListT (VarT (mkName "a"))))
+-- [[]]::[[a]]
+rhs5 = TListE [ TListE [](AppT ListT (VarT (mkName "a")))
+              ]  
hunk ./src/Syntax/Expressions.hs 849
+-- [[b],[]]::[[a]]
+rhs6 = TListE [ TListE [TVarE (mkName "b") (VarT (mkName "a"))](AppT ListT (VarT (mkName "a")))  
+              , TListE [](AppT ListT (VarT (mkName "a")))
+              ]  
+              (AppT ListT (AppT ListT (VarT (mkName "a"))))
hunk ./src/Syntax/Expressions.hs 856
+
+
+
+