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

Re:Nový objev ve funkcionálním programování
« Odpověď #255 kdy: 21. 04. 2018, 23:56:24 »
Jo a mimochodem, kdyby něco takovýho bylo, tak to nesouvisí s pochopením monád, ale

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í".

Je hezky vidět, jak na to jde úplně jinak Elm. Nedělá z věcí vědu, nevytváří desetiúrovňový abstrakce, snaží se být srozumitelnej nováčkům. A funguje to. Narozdíl od Haskellu, kterej je (bohužel) do značné míry sekta...


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Nový objev ve funkcionálním programování
« Odpověď #256 kdy: 22. 04. 2018, 00:10:41 »
Jo a mimochodem, kdyby něco takovýho bylo, tak to nesouvisí s pochopením monád, ale

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í".

Je hezky vidět, jak na to jde úplně jinak Elm. Nedělá z věcí vědu, nevytváří desetiúrovňový abstrakce, snaží se být srozumitelnej nováčkům. A funguje to. Narozdíl od Haskellu, kterej je (bohužel) do značné míry sekta...
Tohle je s odpuštěním blbost, v se tak nechoval a nevím ani o nikom jiném z FP. Naopak komunita okolo FP je nebývale vstřícná a ochotná. Ono vůbec spojovat rozšíření jazyka s chováním jeho uživatelů je dost přitažené za vlasy. Je to prostě obtížnější koncept, na rozdíl např. od malé násobilky.

Re:Nový objev ve funkcionálním programování
« Odpověď #257 kdy: 22. 04. 2018, 00:24:54 »
Naopak komunita okolo FP je nebývale vstřícná a ochotná.
Jo, hlavně ta místní :)

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Nový objev ve funkcionálním programování
« Odpověď #258 kdy: 22. 04. 2018, 00:37:31 »
Naopak komunita okolo FP je nebývale vstřícná a ochotná.
Jo, hlavně ta místní :)
No dyť, stačí se slušně zeptat a všichni se můžou přetrhnout. A teď už fakt spát.

Re:Nový objev ve funkcionálním programování
« Odpověď #259 kdy: 22. 04. 2018, 00:54:39 »
No dyť, stačí se slušně zeptat a všichni se můžou přetrhnout. A teď už fakt spát.
Anebo se na nic neptat a dozvíš se, že seš přitroublej :)

https://forum.root.cz/index.php?topic=13225.msg166597#msg166597


ava

Re:Nový objev ve funkcionálním programování
« Odpověď #260 kdy: 22. 04. 2018, 08:20:53 »
Opravdu nechceš odpovědět 1 a/b a 2 a/b?
Ne, nemám potřebu hrát nějaký rádobypsychohry.

To není žádná psychohra a já nechtěl abys něco hrál, takže to není ani žádný důvod proč ne. Prostě mě to zajímalo. Každopádně vidím že se ti nechce, ať už jsou skutečné důvody jakékoliv. Užívej si dál svoje hejty (zkus si někdy spočítat v kolika příspěvcích napíšeš něco konstruktivního a užitečného a v kolika jen hejtuješ a babráš se v tom kdo co blbě řekl a jaký to byl hlupák, píčus a onanista), já končím a doufám že se mi podaří dlouho se držet stranou diskuzí, ve kterých se vyskytuješ. I když je to občas škoda u jinak zajímavých témat, nestojí to za to.

Re:Nový objev ve funkcionálním programování
« Odpověď #261 kdy: 22. 04. 2018, 09:00:14 »
Každopádně vidím že se ti nechce
No nechce se mi především proto, že jsem ti explicitně napsal
Zkus si tu diskusi přečíct ještě jednou, aniž bys do ní vkládal předpoklad "liftovat = použít lift z Haskellu".
...a ty mě manipuluješ do toho, abych si vybral ze dvou možností, kde jednu považuješ za odsouzeníhodnou a druhá ten předpoklad obsahuje?

Když neposloucháš, co říkám, tak proč by ti měl chtít odpovídat?

v

Re:Nový objev ve funkcionálním programování
« Odpověď #262 kdy: 22. 04. 2018, 09:30:00 »
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"?
myslím, že na to nikdo neodpověděl, Arrows jsem si nastudoval, až dneska ráno, takže některé věci možná jdou udělat jednodušeji než jsem to udělal já


import Control.Arrow

type My1stArrowTy b c = b -> c

liftFuncToMy1stArrow :: (b -> c) -> My1stArrowTy b c
liftFuncToMy1stArrow = arr

lengthLiftedToMy1stArrow :: My1stArrowTy String Int
lengthLiftedToMy1stArrow = arr length

main = do
   let l = (arr (const "hello") >>> arr length) () -- (lift f) (lift a)
   let r = arr (const (length "hello")) () -- lift (f a)
   print $ l == r

Re:Nový objev ve funkcionálním programování
« Odpověď #263 kdy: 22. 04. 2018, 09:34:39 »
myslím, že na to nikdo neodpověděl
Ne - a dík moc, že to děláte. Nebaví mě, že konkrétní věci se tady ignorují a rozpitvávají blbosti...

(lift f) (lift a)
Jaký typ má lift? Neměl jste ho totiž ani v té definici... (konkrétně, bez "metahaskellu")

v

Re:Nový objev ve funkcionálním programování
« Odpověď #264 kdy: 22. 04. 2018, 09:36:14 »
myslím, že na to nikdo neodpověděl
Ne - a dík moc, že to děláte. Nebaví mě, že konkrétní věci se tady ignorují a rozpitvávají blbosti...

(lift f) (lift a)
Jaký typ má lift? Neměl jste ho totiž ani v té definici... (konkrétně, bez "metahaskellu")
vždyť o tam máte - liftFuncToMy1stArrow

Re:Nový objev ve funkcionálním programování
« Odpověď #265 kdy: 22. 04. 2018, 09:42:12 »
vždyť o tam máte - liftFuncToMy1stArrow
Jo, sorry, já jsem tam přehlídl jednu věc, chtěl jsem to hned vzít zpátky, ale předběhl jste mě.


v

Re:Nový objev ve funkcionálním programování
« Odpověď #266 kdy: 22. 04. 2018, 09:46:17 »
No dyť, stačí se slušně zeptat a všichni se můžou přetrhnout. A teď už fakt spát.
Anebo se na nic neptat a dozvíš se, že seš přitroublej :)

https://forum.root.cz/index.php?topic=13225.msg166597#msg166597
zpětně vidím problém v tom, že jste identifikoval typovou třídu Monad s monádou jako takovou (IO), dá se psát `bindIO` místo >>=, ale to neznamená, že nepoužívate monadické rozhraní k IO ((>>=)==bindIO) (a jak jsem napsal, není to přenositelné)

Re:Nový objev ve funkcionálním programování
« Odpověď #267 kdy: 22. 04. 2018, 09:53:30 »
zpětně vidím problém v tom, že jste identifikoval typovou třídu Monad s monádou jako takovou (IO)
Je možný, že jsem se někde vyjádřil tak, že to tak na vás může působit. Já to tam nikde nevidím.

, dá se psát `bindIO` místo >>=, ale to neznamená, že nepoužívate monadické rozhraní k IO ((>>=)==bindIO) (a jak jsem napsal, není to přenositelné)
Nevím, co znamená "nepoužívate monadické rozhraní k IO". Smyslem toho příkladu bylo ukázat, že se vstup/výstup se dá dělat "napřímo", bez použití slova "Monad" - tj. že IO monáda není žádná tajemná černá magie, tzv. "způsob, jak v Haskellu dělat vstupně/výstupní věci", ale jenom takový hezký způsob, jak to zabalit, aby ten vstup/výstup byl user-friendly.

Taky ten příklad měl přiblížit způsob, jak to funguje, člověku, který umí pracovat s věcma jako jsou třeba ty Promisy - v tomhle zápisu je ten Promise vyloženě vidět.

v

Re:Nový objev ve funkcionálním programování
« Odpověď #268 kdy: 22. 04. 2018, 10:07:42 »
příkladu bylo ukázat, že se vstup/výstup se dá dělat "napřímo", bez použití slova "Monad" - tj. že IO monáda není žádná tajemná černá magie, tzv. "způsob, jak v Haskellu dělat vstupně/výstupní věci", ale jenom takový hezký způsob, jak to zabalit, aby ten vstup/výstup byl user-friendly.
fajn, kvituju záměr, ale provedení považuju za extrémně nešťastné (trochu jako tvrdit že nepotřebujete operátor + protože CPU má instrukci add (a mít ji nemusí)), ale do tohohle už fakt nechci zabředávat, to jenom abyste měl možnost pochopit můj pohled

Re:Nový objev ve funkcionálním programování
« Odpověď #269 kdy: 22. 04. 2018, 10:10:14 »
Zpátky k tomuhle:

vždyť o tam máte - liftFuncToMy1stArrow
Jo, sorry, já jsem tam přehlídl jednu věc, chtěl jsem to hned vzít zpátky, ale předběhl jste mě.

jeden z problémů té vaší definice totiž vidím v tom, že v ní pracujete s "lift f" a "lift a", což předpokládám v Haskellu nejde nadefinovat (?) a i tady si pomáháte tím const. Takže to vlastně není "lift a", ale "lift (const a)", což je takový trik, který sice můžu chápat a rozumět mu, ale definici tak, jak jste ji měl, to imho porušuje.

Asi čistější by bylo si v té definici udělat nějaké liftFunc a liftValue, ale to byste pak zase musel nějak vyargumentovat, že tyhle dvě funkce "dělají to samé", což by bylo kostrbatý a zase neformální.

Prostě, čekal jsem spíš, že přijdete s tím diagramem a objekty si nadefinujete nějak hooodně obecně. V Haskellu to v takovéhle obecnosti nejspíš definovat nejde, ani když si pomůžete nějakým neformální "metahaskellem" typu "ta funkce vypadá nějak takhle".

Ale to je jedno, já bych to už nerozpitvával, všichni víme, co lift dělá, a není o čem nad ním diskutovat. Klidně vám k tomu nechám poslední slovo a už se nebudu vyjadřovat, pokud tam nebude na mě mířená otázka :)

----

Spíš jestli teda jste nade mnou definitivně nezlomil hůl, zkuste se prosím bez předpojetí a přednasranosti zamyslet nad https://forum.root.cz/index.php?topic=18107.msg261961#msg261961 - třeba mi nakonec porozumíte.