Monady - wątpliwości

Odpowiedz Nowy wątek
2019-02-22 20:27
0

Od pewnego czasu po przeczytaniu artykułu o polach monadowych w Javie :)))) :D :D nieustannie dręczą mnie pewne wątpliwości. :"( :( :(

Czy Map i Select z LINQ w .Net to jest to samo? :P ? :P ? Wiem że robią to samo ale jakoś tak dziwnie to wygląda

optiona.Select(x => x);
optiona.SelectMany(x => x.GetId());

A może
optiona.FlatSelect(some);

Jeśli używam optionala to jak powinienem nazywać metody?? :O :O

MaybeGetItem
GetOptionalItem
TryGetItem
??? :O :O :O

Kiedy używać Try a kiedy Either ?? :O :O
Jaka to różnica? ?_? :P :P:P

Pozostało 580 znaków

2019-02-22 22:02
1

Co to są pola monadowe???

Monadami mogą być nie tylko kolekcje, ale także parsery (czegokolwiek, np: http://www.lihaoyi.com/fastparse/ ), generatory testów ( https://www.scalacheck.org/ ), monady I/O opakowujące efekty uboczne, wielozadaniowość, strumieniowanie, zarządzanie zasobami, etc ( https://github.com/scalaz/scalaz-zio ).

W monadzie oprócz istnienia określonych funkcji do operowania na danym typie (obowiązkowe są dwie: jedna to opakowanie w monadę, druga to flatMap/ bind/ zwał jak zwał), konieczne jest także przestrzeganie przez nie ściśle określonych reguł, po angielsku: monad laws. Jeśli dane struktury i metody tych reguł nie przestrzegają do końca to nie są monadami, a czymś co najwyżej monadopodobnym.

Kiedy używać Try a kiedy Either

Try jest takim częściowo sparametryzowanym Eitherem, tzn mniej więcej Try[A] = Either[Exception, A]. Jeśli chcesz przepychać Exceptiona używaj Try, jeśli chcesz przepychać coś innego wybierz Either.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit, 2019-02-22 22:08

Pozostało 580 znaków

2019-02-23 07:47
1
Wibowit napisał(a):

Kiedy używać Try a kiedy Either

Try jest takim częściowo sparametryzowanym Eitherem, tzn mniej więcej Try[A] = Either[Exception, A]. Jeśli chcesz przepychać Exceptiona używaj Try, jeśli chcesz przepychać coś innego wybierz Either.

Nie używaj sam z siebie Try. To raczej rozwiązanie na opakowanie starego kodu, który z Exceptionów już korzysta.
Dodatkowo, z dziwnych względów, Try w Scali i w Javie (VAVR) jest zrypany i w pewnym sensie nie spełnia praw monad.
(O ile można w ogóle mówić o monad laws w Scali (czy javie i kotlinie))


Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.
edytowany 3x, ostatnio: jarekr000000, 2019-02-23 07:50

Pozostało 580 znaków

2019-02-23 09:32
0

@Wibowit

:D :D Dzięki za podpowiedź kolego, lubię cię, przypominasz mi czasy kiedy tata kupował mi wibowit w aptece koło przychodni. :D :D :D

Problem w tym, że ja nie rozumiem, dlaczego ludzie chcą przepychać exceptiony :( :( :( :( :O :O
Przecież exeptiona można zamienić na Either stringa z czymś tam :P :P a jak się rzuca exceptiona to po to, żeby zapewnić constrain i mieć stack track. :P :P :O Chyba... :O :O :O

Dodatkowo, z dziwnych względów, Try w Scali i w Javie (VAVR) jest zrypany i w pewnym sensie nie spełnia praw monad.
(O ile można w ogóle mówić o monad laws w Scali (czy javie i kotlinie))

To twój artykuł czytałem :D :D :D :) :))))) Ale fajnie, że się odezwałeś :D :D :D
A dlaczego nie spełnia praw monad.??? ? ? :O :O Przecież jest map, flatMap i jest opakowaniem na inny typ. :O :O :O

Pozostało 580 znaków

2019-02-23 11:06
1
CukierkowyMaczo napisał(a):

Przecież jest map, flatMap i jest opakowaniem na inny typ. :O :O :O

Fakt posiadania map/flatMap i bycia opakowaniem na inny typ nie ma nic wspólnego z prawami -> https://wiki.haskell.org/Monad_laws

edytowany 1x, ostatnio: DisQ, 2019-02-23 11:06

Pozostało 580 znaków

2019-02-23 11:21
1
  1. Przez nagdorliwość twórców Try (w Scali) łapane sa wyjątki w map i flatMap. To intuicyjne dla javowca, ale chore z punktu widzenia fp.
  2. Łamane jest przez to left identity zwykle albo functor composition (monada to functor)
  3. Z drugiej strony jesli funkcje rzucają exceptionami to trudno mówić o jakiś prawach w ogóle.
    Ale generalnie mogli nie byc nadgorliwi - byłoby troche lepiej.

Z ciekawostek: - Optional.map w javie jest tak samo zrypany. Ale w VAVR już nie. VAVRowcy przywrócili porządek w Option, ale nie zrobili tego w Try.

Jezeli mamy jezyk imperatywny, bez wsparcia kompilatora dla monad i to złamane monad laws co najwyżej zaskakuja programistę.


Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.
edytowany 1x, ostatnio: jarekr000000, 2019-02-23 11:23

Pozostało 580 znaków

2019-02-23 11:21
0

Czy ja dobrze rozumiem...??? ;O :O Monada musi mieć zawsze dwa stany i wyłącznie metody (funktory) które operują na dwóch stanach.? :O :O :O ???

Pozostało 580 znaków

2019-02-23 11:24
1

Nie wiem o czym piszesz? Jakie dwa stany?
W zasadzie musi mieć tylko stan 0 czyli opakowaną wartość. Option.some(x) to takie zero monadowe.
Either.right(x), Try.of(x) i Future.successful(x) to takie ZERA


Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.
edytowany 2x, ostatnio: jarekr000000, 2019-02-23 11:27

Pozostało 580 znaków

2019-02-23 11:28
0

Co to jest te "right identity" i "left identity"????? ;( Nie mogę tego zrozumieć, nie programuje funkcyjnie. ;( ;( ;( ;(

Pozostało 580 znaków

2019-02-23 11:29
1

To olej. Będziesz chciał zrozumieć to jest dużo artykułów.
Nie musisz programować funkcyjnie żeby zrozumieć.
Nie musisz rozumieć, żeby funkcyjnie programować, albo żeby po używać tych monad (w javie, scali whatever).

Jak będziesz robił własna monade to wtedy warto się dowiedzieć.


Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.
edytowany 1x, ostatnio: jarekr000000, 2019-02-23 11:30

Pozostało 580 znaków

2019-02-23 11:34
0

No właśnie chcę sam taką zrobić w PHP wzorując się na tej z Javy i .Net. :D :D Dlatego jestem taki zakręcony ;( ;( :(

Możesz polecić jakiś łatwy w zrozumieniu artykuł.? :))))) :))
Teraz czytam to https://medium.com/coding-wit[...]-monad-in-java-8-e3000d85ffd2

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0