--assign expression Class A { man(a:C):Int { a<-1 --incompatible types }; man1():Int { let a:C, b:Bool in { a<-1; b<-1; --incompatible types } }; }; Class B { r:Int; man2():Int { a<-1 --unknown a }; man3():Int { { r <- t; --unknown t q<-u; --unkwon q and u } }; man4():Bool { r<-1 --incompatible ret type }; }; class C inherits D { man1():Object { { a<- true; --invalid type b<-1; --invalid type let b:Int in b<-1; --valid type } }; }; class D { a:Int; b:Bool; c:Cool; --wrong type md1():Object { let f:F <- 1 in b <- f+1 }; md2():C { b <- (b <- (c+1)) }; md3():C { b <- c }; md4():Int { c }; md5():Int { c <- b }; };