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

BoneFlute

  • *****
  • 2 083
    • Zobrazit profil
Re:Nový objev ve funkcionálním programování
« Odpověď #180 kdy: 21. 04. 2018, 00:45:45 »
tak čtení by snad na humpoláka šlo
Nešlo, protože to je efekt. Do toho souboru ti třeba paralelně někdo jinej zapisuje, ty bys pokaždé přečetl jiný číslo a vrátil ho. Tím by se ti ta celá čistota a lazyness rozbila :)
Ano, to je mi samozřejmě jasné. Však to tak i píšu.

, ale zápis už ne). Takže nemůžu použít normální pure funkci. Uvožováním ala Promise to celé obrátím a řeknu: "hele, sežeň mi soubor já si z něho načtu hodnotu, něco spočtu, a pak do něj zase zapíšu." - toto je funkce f1. A to celé třikrát. Následně se celý tento recepis vezme, a nějaký interpret to přečte a musí sehnat ten soubor, a musí provést skutečné zápisy mezi funkcí f1, a f2 a f3.

A celé se to vymejšlí kůli tomu, aby se ověřilo, že: za předpokladu, že splníme všechny deklarované požadavky (načtení a zápis a synchronizaci souborů), bude to fungovat, protože to lze zaručit. Tedy oddělení zaručitelných (pure) a nezaručitelných věcí.
Mně přijde, že tam hledáš zbytečný složitosti. Je to fakt jednoduchý: když máš Promise, tak to znamená, že tu hodnotu získáš "někdy" - tj. nemůžeš ji z toho Promisu hned dostat, když se ti zamane. Jediný, co můžeš, je dát mu callback, kterej se má spustit, ta hodnota bude k dispozici. A ten callback ti zase vrátí nějakou hodnotu - a bylo by fajn, kdyby ji taky mohl vrátit "až někdy". No takže máš takový řetěz callbacků a nějakým způsobem ("někde jinde") vošéfováváš, kdy se má který spustit. Ale každopádně se spustí ve správném pořadí, protože chca nechca na sebe musí čekat přesně v tom pořadí, v jakém je zřetězíš.
Ano. Takže to chápu dobře. Potvrdil jsi mou představu.

A jestli se alespoň trochu chytám, tak ten lift je ta část, kdy ta funkce předává roli tomu interpretu, tak? Nebo jinak?
No... takhle bych to asi nenapsal, protože mi to přijde trochu zavádějící, ale myslíš to asi dobře. Fígl je v tom, že ten "callback" (neříkejme tomu lift, je to fakt pitomina) vrací jakoby "zabalenou hodnotu", kterou může "rozbalit" a předat do dalšího callbacku jenom runtime - ty to v jazyce udělat nemůžeš.
Však. Proto píšu, že ta monáda je "recepis".

Problém tvého tvrzení vidím v tom, že z Maybe, nebo Either tu hodnotu vybalit můžu. Z IO ne. Není monáda jako monáda :-)


Re:Nový objev ve funkcionálním programování
« Odpověď #181 kdy: 21. 04. 2018, 00:50:24 »
To je ale zase nesmysl, funkce nemůže být z kategorie do kategorie a navíc endofunktor má ve jménu “endo”, protože operuje v rámci jedné kategorie. To je fakt jak diskuse s placatozemcem  ::)
Ty mi tak strašně připomínáš zboje... Jsi to ty?

Re:Nový objev ve funkcionálním programování
« Odpověď #182 kdy: 21. 04. 2018, 00:54:21 »
Problém tvého tvrzení vidím v tom, že z Maybe, nebo Either tu hodnotu vybalit můžu. Z IO ne. Není monáda jako monáda :-)
Jasně no, však ta IO monáda je jenom jedna konkrétní "instance" obecnýho konceptu, kterej nijak neříká, že tam nějakou hodnotu z něčeho nesmíš mít možnost získat. Neříká ani, že tam musí být nějaká hodnota :) Říká jenom, že jsou nějaký věci a pro ty jsou definovaný nějaký operace a ty musí splňovat nějaký zákonitosti.

Proto vždycky říkám, že jestli si někdo myslí, že když umí použít IO monádu, tak chápe monády, tak může být taky pěkně na omylu :)

Re:Nový objev ve funkcionálním programování
« Odpověď #183 kdy: 21. 04. 2018, 01:00:06 »
To je ale zase nesmysl, funkce nemůže být z kategorie do kategorie
Nad tímhle jsem taky asi vteřinu dumal, když jsem to psal, a nakonec mě nenapadl jedinej důvod, proč by nemohla. Jakej teda je, jestli jsi ochotnej mi to podat jako pro pitomce?

a navíc endofunktor má ve jménu “endo”, protože operuje v rámci jedné kategorie.
No a ono se snad nemůže C rovnat F(C)? Nebo s čím máš problém?

BoneFlute

  • *****
  • 2 083
    • Zobrazit profil
Re:Nový objev ve funkcionálním programování
« Odpověď #184 kdy: 21. 04. 2018, 01:15:37 »
Problém tvého tvrzení vidím v tom, že z Maybe, nebo Either tu hodnotu vybalit můžu. Z IO ne. Není monáda jako monáda :-)
Jasně no, však ta IO monáda je jenom jedna konkrétní "instance" obecnýho konceptu, kterej nijak neříká, že tam nějakou hodnotu z něčeho nesmíš mít možnost získat. Neříká ani, že tam musí být nějaká hodnota :) Říká jenom, že jsou nějaký věci a pro ty jsou definovaný nějaký operace a ty musí splňovat nějaký zákonitosti.

Proto vždycky říkám, že jestli si někdo myslí, že když umí použít IO monádu, tak chápe monády, tak může být taky pěkně na omylu :)
Zatím si ten obecný koncept představuju jako ten "recepis". Mám-li Maybe monádu, tak její smysl je v tom, aby když mi ntá zanořená funkce vrátí Nothing se na nic nečekalo a seskákalo se dolu. Což ale nedělá ta monáda sama ale obsluha kolem. Když mám IO monádu, tak když mi vrátí "chci soubor", tak obsluha musí sehnat soubor. A v tomto případě obsluha tak nějak musí být runtime.

Nejsem si jist, zda tato představa je už konečně ta monáda, nebo jen podmnožina jejího užití.


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Nový objev ve funkcionálním programování
« Odpověď #185 kdy: 21. 04. 2018, 01:16:39 »
No a ono se snad nemůže C rovnat F(C)? Nebo s čím máš problém?
Může, pak to bude “identity function”, je-li F funkce. Nebo “identity functor”, je-li F funktor. To by fakt bylo hodně užitečné. Ani v jednom případě nemůže být C kategorie. A teď jdu spát, dobrou noc.

Re:Nový objev ve funkcionálním programování
« Odpověď #186 kdy: 21. 04. 2018, 01:19:57 »
Zatím si ten obecný koncept představuju jako ten "recepis".
Tak to asi spíš neděláš dobře... (...s těma sirkama, Jaromíre) :)

Nejsem si jist, zda tato představa je už konečně ta monáda, nebo jen podmnožina jejího užití.
No vždycky, když si řekneš "je to dobrý k X", tak je to konkrétní použití.

Pokud chceš mluvit o monádě jako obecným konceptu, tak si nic nepředstavuj. Obecnej koncept je prostě to, co to je: nějaká struktura, pro kterou platí nějaké zákony. A když něco (cokoliv) tyhle zákony splnít, tak to "je monáda". Úplně stejně jako když něco splní zákony grupy, tak je to grupa :)

Re:Nový objev ve funkcionálním programování
« Odpověď #187 kdy: 21. 04. 2018, 01:32:50 »
Může, pak to bude “identity function”, je-li F funkce. Nebo “identity functor”, je-li F funktor. To by fakt bylo hodně užitečné. Ani v jednom případě nemůže být C kategorie. A teď jdu spát, dobrou noc.
Tak teď si asi v něčem nerozumíme nebo nevím, proč mi tohle říkáš.

Dejme tomu, že by mohla být funkce z kategorie do kategorie. Potom řekněme, že funkci z C do F(C), kde C je kategorie a F je funktor, nazýváme "frkodrťák F nad C". Pak speciálním případem frkodrťáku je frkodrťák endofunktoru, takzvaný "endofrkodrťák". V čem tam máš problém s endofuktorem?

A ten důvod, proč nemůže být funkce z C do D mi prosím zkus nějak podat, to mě fakt zajímá.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Nový objev ve funkcionálním programování
« Odpověď #188 kdy: 21. 04. 2018, 01:33:20 »
jestli jste měl nějaký věcný dotaz, tak jsem ho musel přehlídnout
Ano, měl jsem dotaz, jestli tohle opravdu chcete předložit k diskusi, nebo ještě chcete trochu času na vylepšení.
hned na prvním řádku: "připomínky vítány"
Myslím, že nejlepší by bylo uvést prostě jen příslušný kom. diagram s popisem symbolů, je to názorné a přitom formální, takže by si nikdo nestěžoval na vágní formulaci.

BoneFlute

  • *****
  • 2 083
    • Zobrazit profil
Re:Nový objev ve funkcionálním programování
« Odpověď #189 kdy: 21. 04. 2018, 01:34:29 »
Zatím si ten obecný koncept představuju jako ten "recepis".
Tak to asi spíš neděláš dobře... (...s těma sirkama, Jaromíre) :)
Už zase? Mirku, Mirku... :-P

Pokud chceš mluvit o monádě jako obecným konceptu, tak si nic nepředstavuj. Obecnej koncept je prostě to, co to je: nějaká struktura, pro kterou platí nějaké zákony. A když něco (cokoliv) tyhle zákony splnít, tak to "je monáda". Úplně stejně jako když něco splní zákony grupy, tak je to grupa :)
Tomu rozumím. Ale nejdřív si ty zákony potřebuju nahrát do hlavy, a to není jen tak. Proto se mi líbil ten článek http://funkcionalne.cz/2017/05/monoid/ .

Re:Nový objev ve funkcionálním programování
« Odpověď #190 kdy: 21. 04. 2018, 01:38:08 »
Tomu rozumím. Ale nejdřív si ty zákony potřebuju nahrát do hlavy, a to není jen tak. Proto se mi líbil ten článek http://funkcionalne.cz/2017/05/monoid/ .
Jo, kdyz začneš pochopením monoidu jako obecnýho konceptu, tak určitě neuděláš chybu :)

BTW, moc hezkej mi přijde tenhle: http://funkcionalne.cz/2014/08/types-will-carry-you-over-the-monads/ - popisuje jenom jeden aspekt věci, ale myslím, že má velkej potenciál vytvořit aha zážitek :)

Re:Nový objev ve funkcionálním programování
« Odpověď #191 kdy: 21. 04. 2018, 01:41:06 »
Myslím, že nejlepší by bylo uvést prostě jen příslušný kom. diagram s popisem symbolů, je to názorné a přitom formální, takže by si nikdo nestěžoval na vágní formulaci.
Jj, to jsem právě čekal, že "v" vytasí, když si našel ten paper. Nicméně pak by se dostal do úzkých v tom, že by to byla definice právě jenom pro ty konkrétní symboly :) Proto jsem byl zvědavej, jak si je zadefinuje. Mohla být sranda. No nic :)

BoneFlute

  • *****
  • 2 083
    • Zobrazit profil
Re:Nový objev ve funkcionálním programování
« Odpověď #192 kdy: 21. 04. 2018, 01:45:12 »
BTW, moc hezkej mi přijde tenhle: http://funkcionalne.cz/2014/08/types-will-carry-you-over-the-monads/ - popisuje jenom jeden aspekt věci, ale myslím, že má velkej potenciál vytvořit aha zážitek :)
Jo, tím jsem si už prošel. Já teď spíš potřebuju udělat syntézu.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Nový objev ve funkcionálním programování
« Odpověď #193 kdy: 21. 04. 2018, 01:47:51 »
Může, pak to bude “identity function”, je-li F funkce. Nebo “identity functor”, je-li F funktor. To by fakt bylo hodně užitečné. Ani v jednom případě nemůže být C kategorie. A teď jdu spát, dobrou noc.
Tak teď si asi v něčem nerozumíme nebo nevím, proč mi tohle říkáš.

Dejme tomu, že by mohla být funkce z kategorie do kategorie. Potom řekněme, že funkci z C do F(C), kde C je kategorie a F je funktor, nazýváme "frkodrťák F nad C". Pak speciálním případem frkodrťáku je frkodrťák endofunktoru, takzvaný "endofrkodrťák". V čem tam máš problém s endofuktorem?

A ten důvod, proč nemůže být funkce z C do D mi prosím zkus nějak podat, to mě fakt zajímá.
Tohle fakt nemá smysl, je-li C kategorie, tak F(C) nedává smysl a i kdyby, tak F nemůže být funktor. To už nerozmotáš, chce to začít hezky od začátku a ujasnit si, co je kategorie, co funkce, co funktor a jaké jsou mezi nimi vztahy. To míním dobře, jen fakt nechci skončit čtením textu na úrovni blábolu popsaného zde https://www.nationalreview.com/2017/05/quantum-physics-oppressive-marginalized-people/ (doporučuji přečíst aspoň první dva odstavce), k čemuž ta diskuse bohužel konverguje.

Re:Nový objev ve funkcionálním programování
« Odpověď #194 kdy: 21. 04. 2018, 01:48:32 »
Jo, tím jsem si už prošel. Já teď spíš potřebuju udělat syntézu.
Psal's tady kdysi, že's trochu zkoušel Elm, ne? Ten je na syntézu podle mě ideální - monáda jako obecnej koncept tam není, jenom ty jednotlivý "instance", takže pokud znáš Haskell a chvilku budeš dělat v Elmu, dost rychle tě trkne, co tam chybí a proč se vlastně musí psát desetkrát to samý :)