typeLinkingExpr db imps su (Unary op expr _) = case op of
                                                "!" -> if null $ castConversion db tp TypeBoolean then typeLinkingFailure "Unary !" else [tp]
                                                "+" -> if null $ castConversion db tp TypeInt then typeLinkingFailure "Unary +" else [tp']
                                                "-" -> if null $ castConversion db tp TypeInt then typeLinkingFailure "Unary -" else [tp']    
    where
        [tp] = typeLinkingExpr db imps su expr
        tp' = widenType tp
typeLinkingExpr db imps su (Unary op expr _) = case op of
                                                "!" -> if null $ castConversion db tp TypeBoolean then typeLinkingFailure "Unary !" else [tp]
                                                "+" -> if null $ castConversion db tp TypeInt then typeLinkingFailure "Unary +" else [tp']
                                                "-" -> if null $ castConversion db tp TypeInt then typeLinkingFailure "Unary -" else [tp']    
    where
        [tp] = typeLinkingExpr db imps su expr
        tp' = widenType tp
typeLinkingExpr db imps su (Unary op expr _) = case op of
                                                "!" -> if null $ castConversion db tp TypeBoolean then typeLinkingFailure "Unary !" else [tp]
                                                "+" -> if null $ castConversion db tp TypeInt then typeLinkingFailure "Unary +" else [tp']
                                                "-" -> if null $ castConversion db tp TypeInt then typeLinkingFailure "Unary -" else [tp']    
    where
        [tp] = typeLinkingExpr db imps su expr
        tp' = widenType tp