Nový objev ve funkcionálním programování

jdusizasvym

Re:Nový objev ve funkcionálním programování
« Odpověď #30 kdy: 03. 04. 2018, 07:47:55 »
Co je to monáda, k čemu je dobré a proč bych se to měl učit? Napište mi 5 důvodů. Děkuji.
Neumíš googlit?

Kdyby mi vystačil Google, tak se tu neptám. To je divný, co?


Šáša

Re:Nový objev ve funkcionálním programování
« Odpověď #31 kdy: 09. 04. 2018, 23:08:57 »
A muzete nekdo vysvetlit, co to je ta monada. K cemu je to dobre a uvest
dva tri  priklady?
Tady http://funkcionalne.cz/2017/05/monoid/ je pěkně vysvětlené takové to "Monada je monoid v kategorii endofunktorov." - na konkrétním, jednoduchým a praktickým příkladu.
Na této stránce je to vysvětlené úplně otřesně.

Kit

Re:Nový objev ve funkcionálním programování
« Odpověď #32 kdy: 09. 04. 2018, 23:27:13 »
A muzete nekdo vysvetlit, co to je ta monada. K cemu je to dobre a uvest
dva tri  priklady?
Tady http://funkcionalne.cz/2017/05/monoid/ je pěkně vysvětlené takové to "Monada je monoid v kategorii endofunktorov." - na konkrétním, jednoduchým a praktickým příkladu.
Na této stránce je to vysvětlené úplně otřesně.

Člověk, který nestudoval současnou teoretickou matematiku na vysoké škole, si v tom prostě nepočte. K pochopení monád to vlastně ani není potřebné.

Šáša

Re:Nový objev ve funkcionálním programování
« Odpověď #33 kdy: 10. 04. 2018, 00:08:42 »
A muzete nekdo vysvetlit, co to je ta monada. K cemu je to dobre a uvest
dva tri  priklady?
Tady http://funkcionalne.cz/2017/05/monoid/ je pěkně vysvětlené takové to "Monada je monoid v kategorii endofunktorov." - na konkrétním, jednoduchým a praktickým příkladu.
Na této stránce je to vysvětlené úplně otřesně.

Člověk, který nestudoval současnou teoretickou matematiku na vysoké škole, si v tom prostě nepočte. K pochopení monád to vlastně ani není potřebné.
Naopak, kdo ji studoval pozná, že to psal někdo, kdo o tom moc neví.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Nový objev ve funkcionálním programování
« Odpověď #34 kdy: 10. 04. 2018, 01:31:28 »
A muzete nekdo vysvetlit, co to je ta monada. K cemu je to dobre a uvest
dva tri  priklady?
Tady http://funkcionalne.cz/2017/05/monoid/ je pěkně vysvětlené takové to "Monada je monoid v kategorii endofunktorov." - na konkrétním, jednoduchým a praktickým příkladu.
Na této stránce je to vysvětlené úplně otřesně.
Tak samozřejmě může být. Můžeš prosím rozvést, co ti na tom přijde tak otřesné?


Šáša

Re:Nový objev ve funkcionálním programování
« Odpověď #35 kdy: 10. 04. 2018, 01:51:20 »
A muzete nekdo vysvetlit, co to je ta monada. K cemu je to dobre a uvest
dva tri  priklady?
Tady http://funkcionalne.cz/2017/05/monoid/ je pěkně vysvětlené takové to "Monada je monoid v kategorii endofunktorov." - na konkrétním, jednoduchým a praktickým příkladu.
Na této stránce je to vysvětlené úplně otřesně.
Tak samozřejmě může být. Můžeš prosím rozvést, co ti na tom přijde tak otřesné?
“je pěkně vysvětlené takové to "Monada je monoid v kategorii endofunktorov."” — O tom tam nic není. Monoid v algebře se podstatně liší od monoidu v kategoriích (což je ten případ monád). “Pěkné vysvětlení” musí dát jasnou definici a příklad té kategorie endofunktorů.

Func

Re:Nový objev ve funkcionálním programování
« Odpověď #36 kdy: 18. 04. 2018, 21:13:49 »
Co je to monáda, k čemu je dobré a proč bych se to měl učit? Napište mi 5 důvodů. Děkuji.
Monada je monoid v kategorii endofunktorov. Na pochopenie toho treba rozumiet abstraktnej algebre.
https://goo.gl/dV6gVk

Re:Nový objev ve funkcionálním programování
« Odpověď #37 kdy: 19. 04. 2018, 08:56:56 »
Ano, PHP má monády. Jen se v něm tento pojem nepoužívá.
To je zavádějící, ne-li přímo nepravdivé.

Znovu moje oblíbená analogie: to, že jazyk "má sčítání" a "má celá čísla" NEimplikuje, že "má grupy". Každý jazyk dokáže pracovat s nějakou strukturou, kterou s trochou snahy můžu popsat jako monádu (minimálně třeba s Listem), ale to, o co opravdu jde, je, jestli jazyk umí pracovat s pojmem "monáda" jako abstraktem, ne s konkrétní "instancí" tohoto obecného konceptu. Tohle je potřeba rozlišovat.

Nebo ještě jinak: v Haskellu můžu mít funkci, která něco dělá s nějakou hodnotou typu X přičemž ví jenom to, že X je monáda. Neví, jestli je to List nebo Maybe a je jí to jedno. Pro ni je to prostě monáda a využívá vlastností, které monáda má. Něco takového bys v PHP implementoval asi dost obtížně, protože je k tomu potřeba docela sofistikovaný typový systém.

https://blog.ircmaxell.com/2013/07/taking-monads-to-oop-php.html
Takovéhle příklady mi přijdou spíš věci zamlžovat než objasňovat. Člověk, který ví, co to monáda je, to může brát jako srandacvičení na tohle téma, takovou PHP-rozvičku. Ale člověka, který to neví, to jenom zmate.

Hlavní chyba toho příkladu je v tom, že když ho neznalý člověk uvidí, tak si logicky řekne "aha, takže monády jsou vlastně úplná kokotina, která není k ničemu dobrá" - a bude mít pravdu, protože místo téhle překombinované opičárny mohl použít úplně normální řetězení funkcí a efekt by by stejný.

Za druhé mám docela pochybnosti o tom, jestli to má vůbec napsané dobře. Nechce se mi teď po ránu nad tím úplně dumat a PHP neznám, takže se možná mýlím, nicméně: bind (EDIT: respektive ta funkce, která je jeho druhým parametrem) musí liftovat "obyčejnou" hodnotu do monády, to je jeho význam. V Haskellu:
Kód: [Vybrat]
(>>=)  :: m a -> (  a -> m b) -> m b
- vezmu monadickou hodnotu a funkci z normální hodnoty do jiné monády a dostanu jako výsledek hodnotu v té jiné monádě.

Jenže on tam má:
Kód: [Vybrat]
$newMonad = $monad->bind(function($value) {
    var_dump($value);
    return $value / 2;
});
- ta "lambda" je z T do T. To je buď úplně blbě, nebo je to aspoň zavádějící (jak říkám, nechce se mi teď nad tím víc dumat).

Když už příklad tohodle typu (který je sám o sobě zavádějící, viz začátek příspěvku, ale nešť...), tak bych raději ukázal Promise v JS. To je hezká monáda, na které se to fungování dá celkem dobře ukázat.
« Poslední změna: 19. 04. 2018, 09:03:49 od Mirek Prýmek »

Re:Nový objev ve funkcionálním programování
« Odpověď #38 kdy: 19. 04. 2018, 09:09:01 »
...a BTW, extrémně nevhodný je, že tam definuje ten extract() - tím právě totálně zabíjí celou tu myšlenku. Vtip je právě v tom, že z monády tu hodnotu nemůžu "jenom tak" dostat.

Viz opět ten Promise v JS - ten taky žádý "extract" nemá. Hodnotu můžu dostat jedině do callbacku. Což je právě ten princip, to gró, o které jde :)

Právě kdyby měl správně implementovaný ten bind, tak by tam ten extract mít nemohl...

Kit

Re:Nový objev ve funkcionálním programování
« Odpověď #39 kdy: 19. 04. 2018, 09:16:48 »
Ano, PHP má monády. Jen se v něm tento pojem nepoužívá.
To je zavádějící, ne-li přímo nepravdivé.

Znovu moje oblíbená analogie: to, že jazyk "má sčítání" a "má celá čísla" NEimplikuje, že "má grupy". Každý jazyk dokáže pracovat s nějakou strukturou, kterou s trochou snahy můžu popsat jako monádu (minimálně třeba s Listem), ale to, o co opravdu jde, je, jestli jazyk umí pracovat s pojmem "monáda" jako abstraktem, ne s konkrétní "instancí" tohoto obecného konceptu. Tohle je potřeba rozlišovat.

Aha, takže Haskell nemá objekty, protože s nimi nepracuje jako s abstraktem.

Re:Nový objev ve funkcionálním programování
« Odpověď #40 kdy: 19. 04. 2018, 09:19:18 »
Aha, takže Haskell nemá objekty, protože s nimi nepracuje jako s abstraktem.
Nevím, jak to s tím souvisí, ale ne, Haskell pokud vím objekty nemá (ve smyslu OOP) nebo se aspoň běžně nepoužívají. Má daleko lepší věc: typeclasses (přibližně odpovídající traitům v Rustu nebo interfacům v Go).

v

Re:Nový objev ve funkcionálním programování
« Odpověď #41 kdy: 19. 04. 2018, 09:32:58 »
Ano, PHP má monády. Jen se v něm tento pojem nepoužívá.
To je zavádějící, ne-li přímo nepravdivé.

Znovu moje oblíbená analogie: to, že jazyk "má sčítání" a "má celá čísla" NEimplikuje, že "má grupy". Každý jazyk dokáže pracovat s nějakou strukturou, kterou s trochou snahy můžu popsat jako monádu (minimálně třeba s Listem), ale to, o co opravdu jde, je, jestli jazyk umí pracovat s pojmem "monáda" jako abstraktem, ne s konkrétní "instancí" tohoto obecného konceptu. Tohle je potřeba rozlišovat.

Nebo ještě jinak: v Haskellu můžu mít funkci, která něco dělá s nějakou hodnotou typu X přičemž ví jenom to, že X je monáda. Neví, jestli je to List nebo Maybe a je jí to jedno. Pro ni je to prostě monáda a využívá vlastností, které monáda má. Něco takového bys v PHP implementoval asi dost obtížně, protože je k tomu potřeba docela sofistikovaný typový systém.

https://blog.ircmaxell.com/2013/07/taking-monads-to-oop-php.html
Takovéhle příklady mi přijdou spíš věci zamlžovat než objasňovat. Člověk, který ví, co to monáda je, to může brát jako srandacvičení na tohle téma, takovou PHP-rozvičku. Ale člověka, který to neví, to jenom zmate.

Hlavní chyba toho příkladu je v tom, že když ho neznalý člověk uvidí, tak si logicky řekne "aha, takže monády jsou vlastně úplná kokotina, která není k ničemu dobrá" - a bude mít pravdu, protože místo téhle překombinované opičárny mohl použít úplně normální řetězení funkcí a efekt by by stejný.

Za druhé mám docela pochybnosti o tom, jestli to má vůbec napsané dobře. Nechce se mi teď po ránu nad tím úplně dumat a PHP neznám, takže se možná mýlím, nicméně: bind (EDIT: respektive ta funkce, která je jeho druhým parametrem) musí liftovat "obyčejnou" hodnotu do monády, to je jeho význam. V Haskellu:
Kód: [Vybrat]
(>>=)  :: m a -> (  a -> m b) -> m b
- vezmu monadickou hodnotu a funkci z normální hodnoty do jiné monády a dostanu jako výsledek hodnotu v té jiné monádě.

Jenže on tam má:
Kód: [Vybrat]
$newMonad = $monad->bind(function($value) {
    var_dump($value);
    return $value / 2;
});
- ta "lambda" je z T do T. To je buď úplně blbě, nebo je to aspoň zavádějící (jak říkám, nechce se mi teď nad tím víc dumat).

Když už příklad tohodle typu (který je sám o sobě zavádějící, viz začátek příspěvku, ale nešť...), tak bych raději ukázal Promise v JS. To je hezká monáda, na které se to fungování dá celkem dobře ukázat.
tak když se vám nad tím nechce dumat, tak se k tomu ani nevyjadřujte a aspoň si nastudujte co je "lift"

Re:Nový objev ve funkcionálním programování
« Odpověď #42 kdy: 19. 04. 2018, 09:37:37 »
tak když se vám nad tím nechce dumat, tak se k tomu ani nevyjadřujte a aspoň si nastudujte co je "lift"
Děkuji uctivě, vím dobře, co je to lift.

v

Re:Nový objev ve funkcionálním programování
« Odpověď #43 kdy: 19. 04. 2018, 09:41:05 »
tak když se vám nad tím nechce dumat, tak se k tomu ani nevyjadřujte a aspoň si nastudujte co je "lift"
Děkuji uctivě, vím dobře, co je to lift.
kdybyste to věděl, tak byste nenapsal "bind... funkce, která je jeho druhým parametrem musí liftovat "obyčejnou" hodnotu do monády", leda že byste chtěl úmyslně někoho zmást

Re:Nový objev ve funkcionálním programování
« Odpověď #44 kdy: 19. 04. 2018, 09:55:33 »
kdybyste to věděl, tak byste nenapsal "bind... funkce, která je jeho druhým parametrem musí liftovat "obyčejnou" hodnotu do monády", leda že byste chtěl úmyslně někoho zmást
A Vy, kdybyste nebyl pustý onanista, tak byste chápal, že slova se často nepoužívají jenom v jednom konkrétním úzce definovaném smyslu, ale občas i v nějakém smyslu analogickém.

Například slovo "kruh" se používá ve striktním matematickém smyslu i v různých volných analogiích, např. "rodinný kruh".

...a světe div se, je to tak i se slovem "to lift". Pro demonstraci uveďme např. https://wiki.haskell.org/Lifting_pattern

Q.E.D.

Tímto s dovolením končím. Nemám potřebu se dále účastnit Vaší onanie. Je to prima zábava, ale myslím, že patří do soukromí.

Děkuji vřele za pochopení.

P.S. Tohle fórum jde vážně z kopce, normálně už se tady nedá diskutovat vůbec o ničem. Je to tady samý troll, onanista, troll, onanista. Jediná výjimka jsou některý témata, kde jsou dva onanisti vedle sebe.