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

Re:Nový objev ve funkcionálním programování
« Odpověď #210 kdy: 21. 04. 2018, 10:47:48 »
1. na téma "když je něco nějak v Haskellu, tak to neznamená, že to tak je jedině správně":

Tohle mě zaujalo: https://stackoverflow.com/questions/24856963/how-does-lifting-in-a-functional-programming-context-relate-to-category-theory
Anebo míň ezoterický téma:

Na té stránce o liftingu mě zaujalo:
Citace
In principle, Applicative should be a superclass of Monad, but chronologically Functor and Monad were before Applicative. Unfortunately, inserting Applicative between Functor and Monad in the subclass hierarchy would break a lot of existing code and thus has not been done as of today (2011). This is still true as of Jan 2013.
https://wiki.haskell.org/Lifting

Když se podívám na http://hackage.haskell.org/package/base-4.11.0.0/docs/Control-Monad.html tak je tam
Kód: [Vybrat]
class Applicative m => Monad m where
- takže to už opravili? Nebo jsem nechytl, o co tam jde?


ava

Re:Nový objev ve funkcionálním programování
« Odpověď #211 kdy: 21. 04. 2018, 11:20:52 »
Jo, asi jsem to slovo neměl takhle použít, někoho to zjevně může zmást. A nehádal bych se o to, kdyby nenastoupil "v" s tak sebejistým tónem, za který si zasloužil dostat lekci.

Teď si uvědomuju že možná nevidíš jednu věc - třeba z mého pohledu jsi "v" žádnou lekci neudělil, naopak většinou svých příspěvků shazuješ sama sebe, a to především lidsky. Myslím že tu nejsem sám, kdo to takhle vidí, i když o tom asi žádné hlasování neproběhlo. To, že si myslíš, že jsi "v" nějak vytrestal, je jen tvoje do sebe zahleděná ješitnost.

Re:Nový objev ve funkcionálním programování
« Odpověď #212 kdy: 21. 04. 2018, 11:33:13 »
Teď si uvědomuju že možná nevidíš jednu věc - třeba z mého pohledu jsi "v" žádnou lekci neudělil,
Na to máš samozřejmě právo a je to tvoje věc. Mě zajímalo, jestli tomu "v" opravdu tak dobře rozumí, že má právo machrovat, a ověřil jsem si, že ne. Jestli to ty vidíš, nebo ne, to už je jiná věc.

Mimochodem, "v" vycházel z toho (a koukám, že ty to tak asi taky chápeš), že jediný správný význam slova "lifting" je to, co je v Haskellu jako funkce liftXXX. Pokud ale správně rozumím tomuhle  https://stackoverflow.com/questions/24856963/how-does-lifting-in-a-functional-programming-context-relate-to-category-theory tak to, co je v Haskellu jako "lift" vůbec není to, čemu se "lift" říká v CT. Tak trochu je to dokonce "opačná věc" :)

Ten lift z téhle SO stránky mi přijde přesně odpovídat liftu ze stránky na wiki, kterou jsem odkazoval: https://en.wikipedia.org/wiki/Lift_(mathematics)

Není mi teda moc jasné, proč se vlastně v Haskellu zažil ten "lift" jako něco jinýho. Nebo to možná je to stejný, akorát je potřeba tu kategorii nadefinovat nějak jinak? Nevím, ale zdá se mi to nepravděpodobný. Tady by mohl pomoct Idris, kdyby se mu chtělo chvilku taky psát srozumitelně a vstřícně :)

...no takže minimálně z tohodle je jasný, že žádný jednotný význam pojmu "lifting" není.

Re:Nový objev ve funkcionálním programování
« Odpověď #213 kdy: 21. 04. 2018, 11:46:56 »
Asi jsem úžasný blbec, z nějakého důvodu jsem se rozhodl mrhat svým časem, prozkoumat historii diskuze a odhalit nějaký bod, na kterém bych obnažil, proč je v diskuzích, kde se vyskytuje Prýmek, tak často tolik urážlivé hlušiny a tak málo informací. Myslím, že i on by se nad tím měl hluboce zamyslet, neprospívá to nikomu kromě jeho ješitnosti.

Podle mě je pěkná ukázka toto: Prýmek píše:

bind (EDIT: respektive ta funkce, která je jeho druhým parametrem) musí liftovat "obyčejnou" hodnotu do monády, to je jeho význam.

O něco dál Idris odpovídá:

Ta formulace je špatně v tom, že ona funkce nějakou “obyčejnou” hodnotu liftovat může, ale nemusí. V obecném případě tato funkce vrací monádu, která liftováním vzniknout nemůže (jednoduchým příklad jsou seznamy), jinak by ostatně monády k ničemu nebyly, každá by byla jen “zabalená obyčejná hodnota.”

To je podle mě velice podstatná připomínka. Není to ani tak o definici liftu, ale o tom, že výsledná hodnota funkce v bindu NEMUSÍ vzniknout liftováním parametru, zatímco Prýmek píše že MUSÍ, je to spíš o vlastnostech bindu. Snad ještě jednodušší případ než seznamy je obyčejné a přitom velice užitečné a názorné Maybe, kdy z bindu můžu vrátit None, které prostě liftováním nevzniká.

Pro začátečníka, který se teprve pokouší monádám rozumět, přebírá si význam každého slova, spojuje si v mozku informace z různých zdrojů a hledá aha momenty je tohle velice cenná informace, která pochopení bindu může dost napomoci.

Prýmek rád předepisuje ostatním, jak měli správně zachovat v nějaké situaci, teď já zkusím předepsat jemu, jak si představuji odpověď, která by podle mě diskuzi pomohla: Třeba takhle

Citace
"Jo to máš pravdu, díky za připomenutí/doplnění. Já chtěl v příkladu hlavně ukázat, že ta bindovská funkce musí brát jako parametr obyčejnou hodnotu a vracet monadickou, ale je fakt, že ta monadická nemusí (a i v užitečných případech často nevzniká) liftováním té obyčejné"

A teď se můžeme podívat, co odpověděl Prýmek:

Ta formulace je špatně v tom, že ona funkce nějakou “obyčejnou” hodnotu liftovat může, ale nemusí.
To je striktně vzato pravda. Může třeba vracet konstantu, že. A přesně tohle potřebuje začátečník vědět, protože to je typické použití.

::)

V obecném případě tato funkce vrací monádu, která liftováním vzniknout nemůže (jednoduchým příklad jsou seznamy), jinak by ostatně monády k ničemu nebyly, každá by byla jen “zabalená obyčejná hodnota.”
Aha, takže opět se budeme hádat o význam slova "liftovat" ::) Že já debil jsem nenapsal "vezme tu hodnotu a zmikturuje ji frkodrťákem do monády", to by asi bylo srozumitelnější nebo co.

Bind pro List taky liftuje hodnoty do monády. Akorát to dělá po prvcích, IIRC.

Smajlíci "oči v sloup", hádání se o významy, ironie, nekonstruktivní. Tenhle přístup je podle mě to, co dělá diskuze s Prýmkem tak nasírací. Důsledek? Šest dalších stránek s příspěvky v podobném tónu, stránek spíš hádek než diskuze. Proč? Nevím.

Díky, žes mi ušetřil čas a já se nemusel zase zapojovat. Problém je že to dělá vždycky a všude a mě už to prostě nebaví.

Re:Nový objev ve funkcionálním programování
« Odpověď #214 kdy: 21. 04. 2018, 11:52:46 »
Jo, asi jsem to slovo neměl takhle použít, někoho to zjevně může zmást. A nehádal bych se o to, kdyby nenastoupil "v" s tak sebejistým tónem, za který si zasloužil dostat lekci.

Teď si uvědomuju že možná nevidíš jednu věc - třeba z mého pohledu jsi "v" žádnou lekci neudělil, naopak většinou svých příspěvků shazuješ sama sebe, a to především lidsky. Myslím že tu nejsem sám, kdo to takhle vidí, i když o tom asi žádné hlasování neproběhlo. To, že si myslíš, že jsi "v" nějak vytrestal, je jen tvoje do sebe zahleděná ješitnost.

+ 1 :)

Teď si uvědomuju že možná nevidíš jednu věc - třeba z mého pohledu jsi "v" žádnou lekci neudělil,
Na to máš samozřejmě právo a je to tvoje věc. Mě zajímalo, jestli tomu "v" opravdu tak dobře rozumí, že má právo machrovat, a ověřil jsem si, že ne. Jestli to ty vidíš, nebo ne, to už je jiná věc.

Mimochodem, "v" vycházel z toho (a koukám, že ty to tak asi taky chápeš), že jediný správný význam slova "lifting" je to, co je v Haskellu jako funkce liftXXX. Pokud ale správně rozumím tomuhle  https://stackoverflow.com/questions/24856963/how-does-lifting-in-a-functional-programming-context-relate-to-category-theory tak to, co je v Haskellu jako "lift" vůbec není to, čemu se "lift" říká v CT. Tak trochu je to dokonce "opačná věc" :)

Ten lift z téhle SO stránky mi přijde přesně odpovídat liftu ze stránky na wiki, kterou jsem odkazoval: https://en.wikipedia.org/wiki/Lift_(mathematics)

Není mi teda moc jasné, proč se vlastně v Haskellu zažil ten "lift" jako něco jinýho. Nebo to možná je to stejný, akorát je potřeba tu kategorii nadefinovat nějak jinak? Nevím, ale zdá se mi to nepravděpodobný. Tady by mohl pomoct Idris, kdyby se mu chtělo chvilku taky psát srozumitelně a vstřícně :)

...no takže minimálně z tohodle je jasný, že žádný jednotný význam pojmu "lifting" není.

Možná trošku ubrat na ješitnosti. Ne všichni mají potřebu machrovat. Proč se každá diskuze s tebou musí zvrhnout na poměřování....

Hlavně je vtipné, že chvíli se oháníš Haskellem, chvíli CT, podle toho, jak se ti to hodí.

Jinak ano, dneska v Haskellu, pokud chceš zadefinovat instance Monad, potřebuješ Functor a Applicative. :)


Re:Nový objev ve funkcionálním programování
« Odpověď #215 kdy: 21. 04. 2018, 12:02:53 »
Díky, žes mi ušetřil čas a já se nemusel zase zapojovat. Problém je že to dělá vždycky a všude a mě už to prostě nebaví.
Hm, tak to mě mrzí, že ani ty nevidíš, že to "zatímco Prýmek píše že MUSÍ" není pravda a kdyby Idris četl, co jsem psal, tak by mu to mělo dojít. Jestliže si ošoupávám klávesnici s dlouhým vysvětlením, že jsem něco netvrdil, a o pár příspěvků nastoupí někdo s tím, že zase zkonstatuje, že jsem to tvrdil (a vyvrací mi to), tak prostě už není jak reagovat, než dát oči v sloup.

Možná trošku ubrat na ješitnosti. Ne všichni mají potřebu machrovat. Proč se každá diskuze s tebou musí zvrhnout na poměřování....
Sorry, ale tomuhle vážně při nejlepší vůli nerozumím. Podívej se, byl to v, kdo do diskuse nastoupil (dost zvostra) s tím, že já nemám pravdu. A jediný, co jsem po něm celou dobu chtěl, bylo, aby mi tohle svoje tvrzení dokázal. Když se cítíš, tak ok, ukaž se.

Já jsem nic netvrdil, neměl žádnou alternativní svoji verzi, neříkal "v"-ovi, že jeho verze je blbě. Jenom jsem (záměrně) tvrdošijně trval na tom, aby si "v" svou pozici obhájil, když se cítí, že na to má.

Hlavně je vtipné, že chvíli se oháníš Haskellem, chvíli CT, podle toho, jak se ti to hodí.
Ne. Mám dojem, že v CT je pojem "lifting" chápaný jinak než v Haskellu. Což je rozpor s "v"-ovým tvrzením, že jediné správné použití toho termínu je to z Haskellu a kdokoli to použije jinak, je nedouk a měl by si to nastudovat.

Ještě jednou: já jsem NEtvrdil, že jakákoliv z těch definic je správná. To dělal "v".

Neotáčej smysl toho sporu a nepřenášej důkazní břemeno :)

Re:Nový objev ve funkcionálním programování
« Odpověď #216 kdy: 21. 04. 2018, 12:17:34 »
Obávám se, že asi každý čteme jinou diskuzi. :)


Neotáčej smysl toho sporu a nepřenášej důkazní břemeno :)

Já nevytrhávám sousloví z kontextu, nepřekrucuji cizí věty a stále čekám na tvůj důkaz, že "to nejde" (když už sem taháš matematiku, důkazy a přesné vyjadřování, se kterým, se vší úctou, máš problém - viz třeba strana 10).

Upřímně, fakt mě tato diskuze nebaví, ať už přijde kdo chce s čím chce, tak ho odpálkuješ, protože v Amazonii prší a existuje kobra delší než půl metru (*nadsázka*). Tak se bavit nedá.

-----------------------

Jinak pokud by někoho zaujal/zajímal Haskell, tak pokud neznáte, doporučuji - http://learnyouahaskell.com/ :)

Re:Nový objev ve funkcionálním programování
« Odpověď #217 kdy: 21. 04. 2018, 12:38:24 »
Obávám se, že asi každý čteme jinou diskuzi. :)
Taky mám ten dojem :)

Já nevytrhávám sousloví z kontextu, nepřekrucuji cizí věty
Opakuju: nejsem si vědom toho, že bych to dělal. Pokud máš nějaký konkrétní příklad, budu rád, když mi ho ukážeš.

a stále čekám na tvůj důkaz, že "to nejde" (když už sem taháš matematiku, důkazy a přesné vyjadřování, se kterým, se vší úctou, máš problém - viz třeba strana 10).
No jestli ti to k něčemu je, můžu :)

Kontext:
Dal ti protipříklad k tvému tvrzení.
Nedal. To, ze k necemu napisu, ze to je protipriklad, z toho nedela protipriklad.

Nedal, protoze dat nejde.

Jak už jsem tady napsal asi milionkrát, použil jsem v neformální větě obrat "tato funkce liftuje hodnotu do monády".

Neformální větu jde dost těžko nějak formálně vyvrátit. "v" nebo Idris by mě nejspíš museli prvně požádat, abych ji formuloval nějak formálně, a potom by mohli přijít s protipříkladem. Což neudělali, takže i kdyby se na hlavu postavili, tak jakýkoliv údajný "protipříklad" by byl irelevantní.

Nebo by mohli postupovat taky neformálně a mohli by argumentovat, že to slovo má jeden konkrétní všeobecně přijímaný význam a já jsem ho použil jinak. To by bylo ok, jenže jsem podal příklad, že se používá různě v různých kontextech. Takže taky no go...

Jiná cesta mě nenapadá, takže mám za to, že je to tím dokázáno.

Upřímně, fakt mě tato diskuze nebaví, ať už přijde kdo chce s čím chce, tak ho odpálkuješ, protože v Amazonii prší a existuje kobra delší než půl metru (*nadsázka*). Tak se bavit nedá.
Pokud by to tak bylo, tak by pro něj bylo velmi jednoduché říct "fakt, že v Amazonii prší, je irelevantní pro otázku, jestli je legitimní říct, že ona funkce "liftuje"".

Nemůžu za to, že místo jasné strukturované argumentace se tady komunikuje stylem "douč se to".

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Nový objev ve funkcionálním programování
« Odpověď #218 kdy: 21. 04. 2018, 13:16: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.
dík za připomínku, ale nechci tady šermovat teorií kategorií, nejsem matematik, ten pojem IMHO ani formální definici nepotřebuje, aby se dal normálně použít v diskuzi mezi programátory, takže to lift (f a) == lift f (lift a) se mi zdá v neformálním prostředí dostačující
Ano, určitě je dostačující, to byl jen můj subjektivní názor, že by to bylo pro někoho názornější. Já taky nejsem matematik, ti by se nám tu asi vysmáli.

Re:Nový objev ve funkcionálním programování
« Odpověď #219 kdy: 21. 04. 2018, 13:56:40 »
dík za připomínku, ale nechci tady šermovat teorií kategorií, nejsem matematik, ten pojem IMHO ani formální definici nepotřebuje, aby se dal normálně použít v diskuzi mezi programátory, takže to lift (f a) == lift f (lift a) se mi zdá v neformálním prostředí dostačující
Ano, určitě je dostačující
A vejde se do téhle definice https://wiki.haskell.org/Lifting#Arrow_lifting ?

Pokud budu mít funkci f: String -> Int, tak jak bude v tomhle případě vypadat to "lift a"?
« Poslední změna: 21. 04. 2018, 13:59:06 od Mirek Prýmek »

ava

Re:Nový objev ve funkcionálním programování
« Odpověď #220 kdy: 21. 04. 2018, 14:25:30 »
Díky, žes mi ušetřil čas a já se nemusel zase zapojovat. Problém je že to dělá vždycky a všude a mě už to prostě nebaví.
Hm, tak to mě mrzí, že ani ty nevidíš, že to "zatímco Prýmek píše že MUSÍ" není pravda a kdyby Idris četl, co jsem psal, tak by mu to mělo dojít.

Proboha ty jsi slepý? V jakém smyslu není pravda, že "Prýmek píše že MUSÍ"? Zkus si tu svoji větu číst ještě tolikrát, dokud si nevšimneš, že to tam píšeš, pro tvoje pohodlí ji sem vkládám... Kdyby to oči opravdu nezvládly, zkus grep -i.

bind (EDIT: respektive ta funkce, která je jeho druhým parametrem) musí liftovat "obyčejnou" hodnotu do monády, to je jeho význam.


ava

Re:Nový objev ve funkcionálním programování
« Odpověď #221 kdy: 21. 04. 2018, 14:36:29 »
Já jsem to slovo myslel čistě analogicky, neformálně, jako "posunout se z roviny normálních hodnot do roviny monád", žádnou funkci lift jsem neměl na mysli. A zjevně to nebylo moc šikovný, což nemám problém uznat

Mě přijde že s tím máš ohromný problém, strávil jsi spoustu stránek tím, že jsi se nás pokoušel přesvědčit, že jsi to použil zcela OK, a začal jsi to slovy (necituji, z hlavy: "Kdybyste nebyl pustý onanista"....)

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Nový objev ve funkcionálním programování
« Odpověď #222 kdy: 21. 04. 2018, 14:50:09 »
Jo, asi jsem to slovo neměl takhle použít, někoho to zjevně může zmást. A nehádal bych se o to, kdyby nenastoupil "v" s tak sebejistým tónem, za který si zasloužil dostat lekci.
Teď si uvědomuju že možná nevidíš jednu věc - třeba z mého pohledu jsi "v" žádnou lekci neudělil, naopak většinou svých příspěvků shazuješ sama sebe, a to především lidsky. Myslím že tu nejsem sám, kdo to takhle vidí
Udělil takovou "lekci", jako když někdo s trabantem vybržďuje kamion :)

Re:Nový objev ve funkcionálním programování
« Odpověď #223 kdy: 21. 04. 2018, 14:50:19 »
V jakém smyslu není pravda, že "Prýmek píše že MUSÍ"?
V tom smyslu, že Prýmek o žádné "funkci lift" nemluvil. Což lze snadno nahlédnout tím, že Prýmek mluvil o PHP (resp. o obecném konceptu), kde žádná "funkce lift" ani není.

Asi stokrát bylo málo, tak po sto první: neformální slovo "liftovat" nemusí nutně ve všech kontextech znamenat "použít funkci lift, jak ji definuje Haskell"

Zkus si tu svoji větu číst ještě tolikrát, dokud si nevšimneš
Zkus si tu diskusi přečíct ještě jednou, aniž bys do ní vkládal předpoklad "liftovat = použít lift z Haskellu".

Mohl bych se chovat jako ty a napsat Jsi slepý? Nevidíš, že v tom příspěvku je "liftovat" a ne "použít funkci lift"?. Neudělám to.

ava

Re:Nový objev ve funkcionálním programování
« Odpověď #224 kdy: 21. 04. 2018, 15:21:53 »
V jakém smyslu není pravda, že "Prýmek píše že MUSÍ"?
V tom smyslu, že Prýmek o žádné "funkci lift" nemluvil. Což lze snadno nahlédnout tím, že Prýmek mluvil o PHP (resp. o obecném konceptu), kde žádná "funkce lift" ani není.

... ok, tuhle debatu vzdávám (jako už tolik jiných přede mnou tuto i jiné debaty s tebou). Mám poslední otázku, tak bych tě poprosil o trošičku tvého času. Když si znovu přečteš můj příspěvek (odkazuji níže), ve kterém uvádím odpověď, která by mi přišla plodná, a tvoji skutečnou odpověď.

Kdyby jsi mohl vrátit čas a dostal na výběr mezi těmito dvěma a mohl znovu odpovědět, vybral by jsi raději:

 1. Mojí nebo znovu tvojí odpověď?
 2. Kdyby jsi se rozhodoval hlavně na základě toho, co bude přínosné pro diskuzi, vybral by jsi mojí nebo tvojí odpověď?

Díky.

Klikni na "Citace" pro můj původní příspěvek: