Czy ogólny przypadek monady można wyrazić w Javie 6? Zauważ, że słowa "ogólny przypadek" — może być możliwe, że ogólny przypadek monady nie jest możliwy do wyklarowania, chociaż wiele szczególnych przypadków monady (to jest wielu specyficznych monad) jest możliwych do wyrażenia.Czy ogólny przypadek monady można wyrazić w języku Java 6?
Problemem tutaj jest (brak) Higher-kinded generics in Java; jednak widziałem, że przykładowy kod Haskella był naprawdę przeniesiony na Javę przy użyciu podejścia takiego jak https://stackoverflow.com/a/877036/1123502 (czyli public class Fix<F extends Fix<F>>
).
Oczywiście implementacje, które nie są typem bezpiecznym (takie jak używanie obiektów i downcastów), nie są interesujące.
Aktualizacja: Istnieją 2 wspólne definicje monad: join-fmap i bind-return. Chociaż są one (matematycznie) równoważne, mogą nie być równoważne w tym sensie, że jedna definicja jest możliwa do wyrażenia w Javie, podczas gdy inne nie (jednak wydaje mi się, że niewiarygodność jest mało prawdopodobna). Moje pytanie dotyczy więc obu definicji.
Najważniejsze: czy ktoś pokonywał wszystkie przeszkody i napisał monadę "general case" w Javie 6? Możesz też wskazać artykuł lub dokładny wpis na blogu lub dokładnie wyjaśnić, dlaczego nie jest to możliwe.
Zobacz także [* Monady w Javie *] (http://logicaltypes.blogspot.com/2011/09/monads-in-java.html). – trashgod
@trashgod Zwróć uwagę, że w tej implementacji typem powrotu 'bind' jest' Monad '- a nie' M ', co nie byłoby możliwe w Javie. W związku z tym, jeśli masz klasę List, która dziedziczy po Monadzie, nie ma gwarancji, że wywołanie 'bind' na takiej liście spowoduje utworzenie kolejnej listy, więc nie byłoby zgodne z prawem napisanie czegoś takiego jak' MonadicList stringi = myMonadicList.bind (...) "bez obsady. ... –
sepp2k
... Zatem klasa abstrakcyjna podana w tym artykule nie jest całkowicie poprawną implementacją koncepcji monad (choć prawdopodobnie jest tak bliska poprawności, jak w Javie). – sepp2k