Má Haskell budoucnost?

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Má Haskell budoucnost?
« Odpověď #30 kdy: 14. 05. 2016, 14:54:29 »
Citace z vlákna o pythonu, ať to tam nespamujem ;)

Na cvikach se to do nas snazili nejak nalit, kdyz zjistili, ze to nikdo nechape, ale bylo malo casu a musely se resit predepsane prakticke priklady. Ty prekvapive s vyucovanou teorii nemeli nic moc spolecneho (asi jsme to v tom jen nevideli, nevim, protoze snad ta teorie nebyla nanic?). Treba ty monady a do notaci jsem pochopil az mnohem pozdeji samostudiem pri praci na projektu. Jak jsem byl nastvany na prednasejiciho, ze takovou "nepodstatnou" vec mi zamlcel.
Mě začalo docela bavit koukat se, jakým způsobem různí lidi Haskell (a speciálně monády) vysvětlují. Přijde mi to jako hrozně zajímavé téma, protože to fakt není vůbec lehký vysvětlit dobře a tímpádem se na tom výborně ukazují pedagogické schopnosti. Skoro by se to hodilo jako test na vstupní pohovor pro vyučující (kdyby se něco takového dělalo, většinou nedělá).

Přijde mi totiž, že zrovna u monád se vůbec nevyplatí se odpíchnout od vysvětlování formalismu. V tom se drtivá většina lidí zasekne a dál se nedostane, takže v nich nezůstane vůbec nic, což je ta nejhorší možná varianta. Ono tam jde totiž vlastně o to, že úplně jednoduchý princip (skládání fcí) je z nějakých důvodů potřeba řešit poměrně komplikovaně a vychází to z ještě komplikovanějšího formálního aparátu. Takže jsem po dlouhých úvahách došel k tomu, že je potřeba člověku prvně nějak neformálně ukázat, proč to je a k čemu to vlastně slouží - a teprve potom, až má nějakou mlhavou představu, o čem je vlastně řeč, ukázat prvně buď příklad, nebo velice zlehounka ten formalismus.

Mně třeba největší aha moment přinesla nějaká prezentace, kde týpek vysvětloval monády jako větvení vlakových kolejí - když nedojde k chybě, jede vlak dál touhle cestou, a když dojde, přejede přes tuhle vyhýbku... Bohužel to teď asi nedohledám, ale tohle byla fakt první věc, na které jsem vůbec chytl, o co vlastně teda jde.

...a když tohle člověk chytne, tak už potom dá ty příklady - ale imho by jako první měl vidět příklad rozepsaný pomocí lambd, BEZ do notace a těch speciálních operátorů. Pokud to totiž uvidí napsané v do notaci, získá falešný dojem, že tomu rozumí ("jasně, to je jako v imperativních jazycích") a je úplně mimo, protože nepochopil vůbec nic.

Prostě, mám pocit, že tohle téma může dobře vysvětlit jenom člověk, kterej nemá potřebu dělat chytrýho, ale naopak se rád sníží k "dětinským" příkladům, aby studenty látku efektivně naučil. A takových učitelů je bohužel na našich VŠ asi dost málo... Je to škoda. Zrovna tohle by si zasloužil znát každý mírně nadprůměrný programátor...

Jako chapu, ze ciste FP neni moc popularni. Ale vzhledem k tomu, jak se mu uspesne dari infiltrovat popularni jazyky, tak si myslim, ze minimalne jeden predmet v bakalari by si to zaslouzilo.
Určitě! Hele, upřímně, na Haskell jako takovej sere pes. Je to super obohacení, ale když ho nebudeš znát, nic moc se nestane. Co by ale každej měl znát (na škole minimálně "ochutnat"), je ten FP způsob myšlení - důraz na základní datové struktury a operace nad nimi, proudové zpracování, řetězení, atd. atd.

Ono totiž FP je úžasný způsob, jak si prakticky osahat ty datové struktury, o kterých se člověk učí v teorii...

Rozhodne nerazim nazor "Vsude ciste FP!". Treba prave ta Scala neni ani omylem cista (Haskellisti se na ni myslim celkem casto divaji shora) a FP se na nektere veci hodi mnohem vice, na jine naopak vice vynika imperativni pristup a OOP.
Myslím, že je úžasný koukat na to, jak Haskell razí principielní přístup bez výjimek a způsobuje si tím zpoustu problémů, které se nedají řešit jinak než relativně komplikovaně. A vedle něj jsou pragmatičtější jazyky, které jdou trochu "špinavější" cestou, ztrácí tím některé prima vlastnosti Haskellu, ale zase nemají ty jeho problémy a tímpádem se dají lehčeji naučit a líp se kombinují s tím, co člověk zná odjinud.

FP určitě do mainstreamu pronikat bude (už se to masově děje), ale řekl bych, že spíš v takové té pragmatičtější formě - jako volitelná součást, použitelná, pokud programátor chce, ale nesvazující ho tam, kde nechce.
Monády a jak je (ne)učit se tu už řešilo, ne? Vzhledem k tomu, že jsou začarované (jakmile je někdo pochopí, ztrácí tím automaticky schopnost je vysvětlovat, a něco na tom bude, normálně se mi celkem daří vysvětlovat lidem složitější koncepty jako entropii nebo modality apod., ale u monád mi to prostě nejde), to ani nemá moc smysl.

A teď vážně, buď je lze vysvětlit - někomu bez matematických základů - pomocí lambda výrazů (unit a bind) a jejich skládání, nebo na příkladech kolekcí (to mi ale nepřijde příliš vhodné). Žádnou magii bych v tom nehledal.


v

Re:Má Haskell budoucnost?
« Odpověď #31 kdy: 14. 05. 2016, 14:55:58 »
problém nastal, když jsem začal skládat dva jazyky, jeden "normální", druhý (tvořený příkazy break a continue) povolený jen v těle iterace jako součet s oním "normálním", pak je nutné použít stejnou interpretační funkci na dva různý typy
jestli to zní zmateně, tak to může být i tím, že já sám jsem
Aniž bych viděl kód - někdo tu linkoval http://www.cs.ru.nl/~W.Swierstra/Publications/DataTypesALaCarte.pdf - vypadá to jako dost podobné tomu, co děláš :)
já jsem to asi aji četl, ale myslím, že to neřeší můj problém (víc intepretrů/"backendů"), já sám ten problém momentálně neřeším, ten kód vypadá docela hnusně, ale funguje, až se mi jednou bude chtít, klidně ho zahodím a napíšu znovu a jinak

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Má Haskell budoucnost?
« Odpověď #32 kdy: 14. 05. 2016, 14:57:15 »
Mně třeba největší aha moment přinesla nějaká prezentace, kde týpek vysvětloval monády jako větvení vlakových kolejí -
Ten samý princip je použitý tady: http://www.zohaib.me/yet-another-what-is-a-monad-post/ Ale není to ten článek, co mi tenkrát přinesl ten aha moment :)
A zase ty monoidy :)

Re:Má Haskell budoucnost?
« Odpověď #33 kdy: 14. 05. 2016, 15:56:15 »
A zase ty monoidy :)
Jasně :) Ale odkazoval jsem to kvůli tomu obrázku s kolejema dole. Tenhle obrázek by imho měl každý zájemce o monády vidět jako první. A pak teprve vysvětlovat něco dalšího.

Monády a jak je (ne)učit se tu už řešilo, ne?
Ani ne. Minule jsme se bavili hlavně o tom, jestli je vůbec potřeba je znát k tomu, aby člověk mohl programovat IO v Haskellu.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Má Haskell budoucnost?
« Odpověď #34 kdy: 14. 05. 2016, 16:34:08 »
A zase ty monoidy :)
Jasně :) Ale odkazoval jsem to kvůli tomu obrázku s kolejema dole. Tenhle obrázek by imho měl každý zájemce o monády vidět jako první. A pak teprve vysvětlovat něco dalšího.

Monády a jak je (ne)učit se tu už řešilo, ne?
Ani ne. Minule jsme se bavili hlavně o tom, jestli je vůbec potřeba je znát k tomu, aby člověk mohl programovat IO v Haskellu.

1) Tak aspoň jsou ty koleje názornější než burritos.
2) Pro IO asi nutně ne, ale IO je vůbec pofidérní, monády bych začínal učit od Identity a Maybe.


Kit

Re:Má Haskell budoucnost?
« Odpověď #35 kdy: 14. 05. 2016, 16:59:30 »
Jasně :) Ale odkazoval jsem to kvůli tomu obrázku s kolejema dole. Tenhle obrázek by imho měl každý zájemce o monády vidět jako první. A pak teprve vysvětlovat něco dalšího.

Ty koleje vypadají dobře. Teď mi zbývá jen pochopit, co mají s těmi monádami společného...

Re:Má Haskell budoucnost?
« Odpověď #36 kdy: 14. 05. 2016, 17:03:53 »
1) Tak aspoň jsou ty koleje názornější než burritos.
Burritos jsou nesmysl, tohle je názorný, korektní vysvětlení přímo k jádru pudla.

Kouknul jsi se na ten link? Kvůli maybe potřebuješ dvojnásobek funkcí, protože jak je to strikt, tak musíš řešit, že by se třeba ten druhý parametr musel vyhodnocovat dlouho. Takže oproti zcela triviální implimentaci Maybe v haskellu to je docela prohra.
Aha, ok. Na link jsem se předtím zběžně koukl, ale netušil jsem, co chceš říct, tak jsem nevěděl, co tam mám hledat :)

Máš pravdu, je to komplikace. Ale když máš default-lazy jazyk, tak je těch komplikací víc a jsou hlubší. Tohle je lahoda.

Navíc místo dvou funkcí můžeš použít (jak říká Radek) nějakou obálku typu future apod. Pořád je to řádově jednodušší než tanečky s IO monádou :)

Re:Má Haskell budoucnost?
« Odpověď #37 kdy: 14. 05. 2016, 17:07:16 »
Ty koleje vypadají dobře. Teď mi zbývá jen pochopit, co mají s těmi monádami společného...
Ty koleje vyjadřují tvůj základní cíl: chceš skládat funkce, které při úspěchu vrací typ X a pokračují ve zpracování, zatímco při neúspěchu vraxí typ Y a dál nepokračují. To je přesně to, k čemu monády slouží a je to triviální.

Potom další krok je, jak toho dosáhnout - no a dosáhneš toho vhodně zvolenými lambda funkcemi. To pořád ještě pochopí každý.

...no a pak teprve přichází ta magie: tenhle celý cirkus můžeš nadefinovat obecně, bez ohledu na konkrétní typy a tomu se říká monáda.

Snadný jak facka, ne?! ;)

Re:Má Haskell budoucnost?
« Odpověď #38 kdy: 14. 05. 2016, 17:09:17 »
Mně třeba největší aha moment přinesla nějaká prezentace, kde týpek vysvětloval monády jako větvení vlakových kolejí -
Ten samý princip je použitý tady: http://www.zohaib.me/yet-another-what-is-a-monad-post/ Ale není to ten článek, co mi tenkrát přinesl ten aha moment :)

Možná je to tento článek? https://fsharpforfunandprofit.com/rop

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Má Haskell budoucnost?
« Odpověď #39 kdy: 14. 05. 2016, 17:10:05 »
1) Tak aspoň jsou ty koleje názornější než burritos.
Burritos jsou nesmysl, tohle je názorný, korektní vysvětlení přímo k jádru pudla.

Jo, jsou nesmysl, ale ty koleje se taky nezdají, že by dostatečně vysvětlovaly různé aspekty monád, jen jeden (byť důležitý a často se vyskytující).

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Má Haskell budoucnost?
« Odpověď #40 kdy: 14. 05. 2016, 17:11:40 »
Ty koleje vypadají dobře. Teď mi zbývá jen pochopit, co mají s těmi monádami společného...
Ty koleje vyjadřují tvůj základní cíl: chceš skládat funkce, které při úspěchu vrací typ X a pokračují ve zpracování, zatímco při neúspěchu vraxí typ Y a dál nepokračují. To je přesně to, k čemu monády slouží a je to triviální.

Potom další krok je, jak toho dosáhnout - no a dosáhneš toho vhodně zvolenými lambda funkcemi. To pořád ještě pochopí každý.

...no a pak teprve přichází ta magie: tenhle celý cirkus můžeš nadefinovat obecně, bez ohledu na konkrétní typy a tomu se říká monáda.

Snadný jak facka, ne?! ;)
 To je ale trochu zjednodušující, seznam je taky monáda a takto vysvětlit nejde, ne?

v

Re:Má Haskell budoucnost?
« Odpověď #41 kdy: 14. 05. 2016, 17:11:57 »
Ty koleje vypadají dobře. Teď mi zbývá jen pochopit, co mají s těmi monádami společného...
Ty koleje vyjadřují tvůj základní cíl: chceš skládat funkce, které při úspěchu vrací typ X a pokračují ve zpracování, zatímco při neúspěchu vraxí typ Y a dál nepokračují. To je přesně to, k čemu monády slouží a je to triviální.
[citation needed]

v

Re:Má Haskell budoucnost?
« Odpověď #42 kdy: 14. 05. 2016, 17:13:11 »
To je ale trochu zjednodušující, seznam je taky monáda a takto vysvětlit nejde, ne?
byl jste rychlejší, dále např. identity, reader, state

v

Re:Má Haskell budoucnost?
« Odpověď #43 kdy: 14. 05. 2016, 17:18:11 »
To je ale trochu zjednodušující, seznam je taky monáda a takto vysvětlit nejde, ne?
byl jste rychlejší, dále např. identity, reader, state
a taky IO
prostě říct, že monáda je jako tamto kolejiště je jako říct, že monáda je jako burrito

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Má Haskell budoucnost?
« Odpověď #44 kdy: 14. 05. 2016, 17:18:46 »
Ty koleje vypadají dobře. Teď mi zbývá jen pochopit, co mají s těmi monádami společného...
Ty koleje vyjadřují tvůj základní cíl: chceš skládat funkce, které při úspěchu vrací typ X a pokračují ve zpracování, zatímco při neúspěchu vraxí typ Y a dál nepokračují. To je přesně to, k čemu monády slouží a je to triviální.
[citation needed]
To je prostě jen jeden typ monády, Maybe nebo případně Error.