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

BoneFlute

  • *****
  • 2 010
    • Zobrazit profil
Re:Nový objev ve funkcionálním programování
« Odpověď #195 kdy: 21. 04. 2018, 01:52:24 »
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ý :)
OK, díky za tip.


Re:Nový objev ve funkcionálním programování
« Odpověď #196 kdy: 21. 04. 2018, 02:02:10 »
Tohle fakt nemá smysl, je-li C kategorie, tak F(C) nedává smysl a i kdyby, tak F nemůže být funktor.
Fakt tě nechápu.

Let C and D be categories. A functor F from C to D is a mapping that

* associates to each object X in C an object F(X) in D
* associates to each morphism  f: X -> Y in C a morphism F(f): F(X) -> F(Y)

zapisuje se F: C -> D

Vadí ti přesně co? Ten zápis F(C)? Tak sorry, to se asi nepoužívá, no, ok. Jak jsem to měl zapsat? "D takové, že F: C -> D"? To jsi tomu vážně nerozuměl, nebo to je jenom taková zbojovština?

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Nový objev ve funkcionálním programování
« Odpověď #197 kdy: 21. 04. 2018, 02:09:50 »
Jak jsem to měl zapsat?
To netuším, nevím totiž, co chceš říct.

Re:Nový objev ve funkcionálním programování
« Odpověď #198 kdy: 21. 04. 2018, 02:10:25 »
To netuším, nevím totiž, co chceš říct.
D

Re:Nový objev ve funkcionálním programování
« Odpověď #199 kdy: 21. 04. 2018, 02:12:41 »
Ale už dobrou, zboji.

Je to škoda, že u tebe není poznat, co myslíš jako vážnou výhradu a kdy jenom zbojuješ, kdyby to tak nebylo, mohlo z tebe mít lidstvo větší užitek.

Ale i tak tě mám rád, seš takovej pičus urejpanej, jak si na to člověk zvykne, začne to být sympatický.


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Nový objev ve funkcionálním programování
« Odpověď #200 kdy: 21. 04. 2018, 02:14:17 »
To jsi tomu vážně nerozuměl
Jak říkal v, jestli to čte někdo, kdo se to chce naučit, tak ty ho dokonale mateš.

Re:Nový objev ve funkcionálním programování
« Odpověď #201 kdy: 21. 04. 2018, 02:32:37 »
Jak říkal v, jestli to čte někdo, kdo se to chce naučit, tak ty ho dokonale mateš.
No, víš, on mě nikdo neplatí za to, abych se učil CT. Pokud na něco takovýho najdu čas hodinu za pár měsíců, je to výjimka. Mám spoustu jiných věcí, který mě zajímají víc a dám jim přednost. Detaily typu co se jak zapisuje se pak bohužel dost často z hlavy vypaří. A stejně tak si občas člověk neuvědomí, že někde něco platí a tímpádem něco jinýho někde na druhým konci nejde...

Mně (a všem ostatním, co by byli potenciálně rádi, kdyby jim aspoň něco z toho v hlavě zůstalo) by především víc pomohlo, kdybys míň rejpal a machroval a víc konstruktivně pomohl - třeba se zeptal "hele, tomuhle zápisu nerozumím, co jsi jim chtěl říct?"

Každopádně se ale shodnem, že pokud má někdo v plánu se naučit CT, rozhodně by se to neměl učit z mých pindů tady. Myslíš, že by pomohlo, kdybych si to dal do disclaimeru pod každej příspěvek? ;)

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Nový objev ve funkcionálním programování
« Odpověď #202 kdy: 21. 04. 2018, 02:44:15 »
Detaily typu co se jak zapisuje se pak bohužel dost často z hlavy vypaří. A stejně tak si občas člověk neuvědomí, že někde něco platí a tímpádem něco jinýho někde na druhým konci nejde...
To je normální a nikoho to irituje. Ale evidentně už hezkou řádku místních irituje (podle toho, co tu psali), když někdo trvá na nějaké své evidentní chybě a ještě k tomu s arogancí a urážkami à la Ovčáček. Myslím, že v byl dostatečně vstřícný a věcný (a obětavý, čas je drahý) a zcela určitě by se tak chovali i ostatní, nebýt provokací.

P.S. A když někdo napíše, že něco nedává smysl, není to rejpání. A když někdo upozorní, že se píše laziness, není grammar nazi. Naopak se snaží pomoci. To by jinak byl grammar nazi každý spell checker.
« Poslední změna: 21. 04. 2018, 02:50:45 od Idris »

Re:Nový objev ve funkcionálním programování
« Odpověď #203 kdy: 21. 04. 2018, 03:00:02 »
Myslím, že v byl dostatečně vstřícný a věcný (a obětavý, čas je drahý) a zcela určitě by se tak chovali i ostatní, nebýt provokací.
Ne, nebyl. "v" se zachoval jako namachrovanej pičus a to, co tady předvedl s tou rádobydefinicí jenom dokazuje, že na to nemá sebemenší právo. Tobě právo chovat se jako namachrovanej pičus přiznávám, ty na to aspoň máš. Příjemný to ani tak není, ale člověk se to naučí ignorovat.

"v" dostal, co si zasloužil: divadýlko.

A když někdo napíše, že něco nedává smysl, není to rejpání.
Ale ano, je. Protože kdyby se opravdu snažil pomoci, tak by nenapsal "tohle nedává smysl, nastuduj si to" (což samozřejmě adresát dešifruje jako "seš nýmand, nehodlám s tebou zahazovat svůj majestát"), ale třeba právě to zmíněný "tomuhle nerozumím, taková notace se nepoužívá" (což dešifruje jako "rád bych ti pomohl, ale nerozumím tomu, co se snažíš říct").

Ok, laziness beru na vědomí, ale udržím to tak dvě minuty myslím :)

Re:Nový objev ve funkcionálním programování
« Odpověď #204 kdy: 21. 04. 2018, 03:00:29 »
...a už fakt ale musím na kutě, dobrou :)

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Nový objev ve funkcionálním programování
« Odpověď #205 kdy: 21. 04. 2018, 04:16:22 »
Myslím, že v byl dostatečně vstřícný a věcný (a obětavý, čas je drahý) a zcela určitě by se tak chovali i ostatní, nebýt provokací.
Ne, nebyl. "v" se zachoval jako namachrovanej pičus a to, co tady předvedl s tou rádobydefinicí jenom dokazuje, že na to nemá sebemenší právo.
Proč hned další urážení? Asi každý myslíme jiného v. Ta definice byla věcně v pořádku. Jinak nerozumím některým narážkám. Možná protože už je tak pozdě. Nebo mi něco uniklo.

v

Re:Nový objev ve funkcionálním programování
« Odpověď #206 kdy: 21. 04. 2018, 08:43:22 »
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í

ava

Re:Nový objev ve funkcionálním programování
« Odpověď #207 kdy: 21. 04. 2018, 09:59:25 »
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.

Re:Nový objev ve funkcionálním programování
« Odpověď #208 kdy: 21. 04. 2018, 10:16:48 »
ale nechci tady šermovat teorií kategorií
Ale vždyť přesně to jsi dělal:

že vaše prapůvodní tvrzení je konzistentní [...] s Moggim

Navíc pokud máš ambici definovat ten koncept liftu obecně, tak to těžko můžeš dělat pomocí Haskellu. Možná se pletu, ale mám za to, že ten liftA, liftM, lift... je tam zvlášť právě proto, že tam obecný lift (pro cokoli, kde bysme si ho uměli představit) nadefinovat nejde.

(A to ještě pomíjím to, že to slovo jako takové má opravdu různý význam v různých kontextech, žádná "obecná definice" prostě není)

, 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í
Hele, já respektuju tvoji erudici v Haskellu. Když budu dumat nad tím, jak by se tam něco udělalo, nebo jak je v Haskellu zvykem něco dělat, budu moc rád, když mi to budeš ochotný vysvětlit - a budu poslouchat jak žáček ve škole.

Problém ale je, že chceš, jak říkáš, pomoct rozšířit FP, a přitom se chováš z poloviny jako haskellový fachidiot ("tak, jak je to v Haskellu, tak je to jedině správně") a z druhé poloviny využíváš znalost Haskellu k tomu, abys jím mlátil lidi po hlavě.

Mám za to, že jeden z hlavních důvodů, proč se Haskell nerozšířil, jsou přesně takhle se chovající lidi: programují v tom pět let, cítí se jako kněží desátého zasvěcení ezoterního spolku supermanů a kdokoli má nižší zasvěcení, pro toho mají jenom "tak si to nastuduj, ať taky dosáhneš stejnýho zasvěcení".

Lidi, kteří něčemu opravdu dobře rozumí, se obvykle poznají podle toho, že s tím nedělají vědu a dokážou to vysvětlit tak, aby to druhý pochopil.

-------

No nic, můžem to snad uzavřít a chovat se dál jako lidi :) Měl bych tady takový dva náměty k diskusi:

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

2. návrat k původnímu tématu:

Nebavili jsme se o Haskellu. Bavili jsme se o PHP. Jak by podle tebe vypadal lift v PHP - tj. v rámci toho příkladu, ke kterýmu jsem se vyjadřoval?
« Poslední změna: 21. 04. 2018, 10:18:41 od Mirek Prýmek »

Re:Nový objev ve funkcionálním programování
« Odpověď #209 kdy: 21. 04. 2018, 10:27:13 »
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
Všichni vycházíte ze stejného předpokladu: že slovem "liftovat" musíme myslet "použít funkci lift".

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:

Když se něco posunuje na nějakou vyšší úroveň, tak se tomu často říká "lift" (může to znamenat různé věci v různých kontextech, ale společné to má ten "skok do vyššího světa"), takže mě, blbce starýho, po ránu nenapadlo napsat nic jinýho, než že ta funkce "liftuje", což nebylo vůbec šťastný, protože mě mohlo napadnout, že člověk, který zná Haskell, si pod tím slovem představuje něco dost konkrétního.

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.

Bohužel, neznám žádné lepší slovo pro funkci "z jednoho světa do jiného". Ty nějaký znáš?