Здравствуйте, korvin_, Вы писали:
_>Где здесь должно быть указано, что new Foo может вернуть не объект класса Foo, а OutOfMemory? В сигнатуре конструктора Foo? В "сигнатуре" оператора new?
Примерно там же, где сейчас указано, что new Foo может выбросить OutOfMemoryError. То есть — в "сигнатуре" оператора new.
_>Тот же вопрос про StackOverflow: где он должен быть указан? В сигнатуре каждой функции (метода)? Операция () вызов метода автоматически должна его добавлять к каждому методу?
Если идти по строгому пути — то да, в сигнатуре каждой функции.
_>Теперь Haskell. Имеем такой код, например:
_>_>data Expr
_> = Val Int
_> | Add Expr Expr
_> | Mul Expr Expr
_> | If Expr Expr Expr
_>eval :: Expr -> Expr
_>eval e = ...
_>expr0 = If (Mul (Val 1) (Val 0))
_> (Add (Mul (Val 4) (Val 10))
_> (Val 2))
_> (Mul (Add (Val 7) (Val 14))
_> (Val 2))
_>print (eval expr0)) -- Val 42
_>
_>Где тут должено быть указано OutOfMemory?
Хороший вопрос. Надо полагать — везде.