Здравствуйте, vdimas, Вы писали:
V>Кстате, смотрю в Java 8 добавили Optional и в нём та-да-ам:
V>V>opt.ifPresent( x -> System.out.println("found " + x));
V>
Как же так?
По твоей же теории в не функциональном языке без вариантов такое невозможно!
V>Или можно взглянуть сюда:
V>V>public T ValueOr(T alternative) => hasValue ? value : alternative;
V>
Ой! Твоя теория распадается? Или ты все же решил признать очевидное?
V>Т.е., я ошибся только во второй части этого утверждения:...
Не. Ты с самого начала был не прав и (похоже) уже это осознал. Но пока не готов признать свою ошибку и пытаешься выкрутиться.
Советую тебе научиться признавать свою неправоту. В этом нет ничего зазорного. Наоборот, вот такие вот попытки выкрутиться выглядят намного хуже.
Все твои утверждения были ложными. А именно:
1. Option спокойно можно реализовать в виде Value-типа. Это собственно доказано реализацией из Немерла.
2. Варианты (они же: размеченные объединения, tagged unions, discriminated unions, disjoint union, sum type) можно реализовать в виде Value-типов. Это доказано просто их исходным названием (
tagged unions), описанием и примерами реализации на С++.
3. Варианты спокойно могут быть в не функциональном языке. И вообще понятие функционального языка очень размытое.
4. Паттерн матчинг (ПМ) возможен не только вариантам, но и по любым типам. Причем типы даже не обязаны быть полиморфными, так как ПМ может проверять структуру типа (значения его членов).
Все твои придирки к конкретным реализациям не более чем попытка увести разговор в строну. Убери те члены которые тебе не нравятся и ровным счетом ничего не изменится.
Ну, а синтаксически все это можно завернуть в операторы или другие фичи языка.