Jak si rozšiřujete své vědomosti?

v

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #165 kdy: 15. 04. 2016, 20:05:15 »
článek na který jsem reagoval byl o haskellu, celou dobu mluvím o haskellu,
Dobře, beru na vědomí, že se bavíme jenom o Haskellu. Pak teda pojem monáda budeme používat jenom ve významu "třída Monad v Haskellu"? Čili i tvrzení "promisy v JS jsou monadické" je nesmysl? No, to se nám ta debata teda hodně zúží a pak už asi není v ničem sporu. V Haskellu je spousta fcí s kindem "Monad m" takže je asi potřeba aspoň tušit, co to znamená, to je víceméně sebepotvrzující tvrzení :)

Tak aspoň zkuste napsat, co se vám na tom článku nelíbilo, když jsme všechny spory zahodili :)))
uvědomujete si, že tahle debata se odvíjí od vašeho postu s odkazem na článek o IO v haskellu a monádách?
je "potřeba tušit", ale "K tomu, abych v Haskellu programoval, nutne pojem Monada vubec nemusim znat"
btw "kind" je něco jiného


zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Jak si rozšiřujete své vědomosti?
« Odpověď #166 kdy: 15. 04. 2016, 20:11:03 »

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #167 kdy: 15. 04. 2016, 20:14:15 »
uvědomujete si, že tahle debata se odvíjí od vašeho postu s odkazem na článek o IO v haskellu a monádách?
Ano. Cili nebylo by nejproduktivnejsi, kdybyste polemizoval s konkretnimi tvrzenimi z clanku, ktery jste oznacil za chybny?

je "potřeba tušit", ale "K tomu, abych v Haskellu programoval, nutne pojem Monada vubec nemusim znat"
No domnivam se (a klidne muzu mylit), ze se docela dlouho da vystacit s mlhavym chapanim, ze to je "takovej ten divnej kontejner, co se pri praci s nim musi pouzivat do". Nemuzu to potvrdit z vlastni zkusenosti, protoze co je to monada snad vim, ale prakticky jsem v Haskellu nic vetsiho nedelal. Nicmene neslysim prvne, ze to nekdo z vlastni zkusenosti potvrzuje:

No začátečník IMO prostě použije "do" notaci v IO monadu v vůbec nepotřebuje vědět, co monada je. Poměrně brzo narazí na rozdíl mezi "pure" a "monadic" výpočtem, tak se s tím nějak popere (vezme to jako nějakou "divnou" kontejnerizaci) a pořád nemusí tušit, co to monáda je. A program už může napsat docela slušný.

Nicmene pokud se chcete v debate vracet, tak bych rad pripomnel, ze se odvijela od zbojova tvrzeni, ze se v Haskellu neda poradne psat, pokud clovek nezna teorii kategorii. Vy jste se zminil, ze vam ta matematicka argumentace neni blizka. Takze CT neznate? A jak propana muzete psat v Haskellu?! :)

btw "kind" je něco jiného
Jasně, omlouvám se, upsal jsem se. Každopádně obecné monadické operace se bez podpory kindů napsat nedají, pokud se nepletu.

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #168 kdy: 15. 04. 2016, 20:16:58 »
Divné, že to sem dal zrovna Prýmek, když to vyvrací jeho tvrzení.
Divný je, že se to líbí tobě, když to vyvrací tvoje tvrzení z jiné debaty:

Citace
The heart of the matter is that people begin with the concrete, and move to the abstract. [..] This is why it’s such good pedagogical practice to demonstrate examples of concepts you are trying to teach.

Zadne tvoje "prvne se musi naucit teoreticke zaklady!" ;)

No a jake moje tvrzeni a cim by to melo vyvracet?!

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:Jak si rozšiřujete své vědomosti?
« Odpověď #169 kdy: 15. 04. 2016, 20:34:57 »
...
No domnivam se (a klidne muzu mylit), ze se docela dlouho da vystacit s mlhavym chapanim, ze to je "takovej ten divnej kontejner, co se pri praci s nim musi pouzivat do". Nemuzu to potvrdit z vlastni zkusenosti, protoze co je to monada snad vim, ale prakticky jsem v Haskellu nic vetsiho nedelal. Nicmene neslysim prvne, ze to nekdo z vlastni zkusenosti potvrzuje:

No začátečník IMO prostě použije "do" notaci v IO monadu v vůbec nepotřebuje vědět, co monada je. Poměrně brzo narazí na rozdíl mezi "pure" a "monadic" výpočtem, tak se s tím nějak popere (vezme to jako nějakou "divnou" kontejnerizaci) a pořád nemusí tušit, co to monáda je. A program už může napsat docela slušný.
...

Muzu potvrdit. Nas skolni tymovy projekt v Haskellu takto zacinal ("musi se tam placnout do a pouzivat ta sipka" ;D). Dale nasledovalo zdeseni, ze to divne "IO" se musi vsude na desitkach mist dopsat, aby se to vubec prelozilo - doslova jsme si rikali, ze nam to IO infikovalo cely kod. Ke konci projektu jsme snad dokonce i zacinali chapat, o co jako ze asi jde. BTW teorie z prednasky nam byla uplne na pendrek, to uz vice nam daly cvika, kde se naopak jelo spise vyhradne na prakticke priklady.


v

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #170 kdy: 15. 04. 2016, 20:37:03 »
uvědomujete si, že tahle debata se odvíjí od vašeho postu s odkazem na článek o IO v haskellu a monádách?
Ano. Cili nebylo by nejproduktivnejsi, kdybyste polemizoval s konkretnimi tvrzenimi z clanku, ktery jste oznacil za chybny?
článek: "IO in Haskell has nothing to do with monads."
možná se pletu, moje znalost haskellu je spíš praktického ražení, ale myslím, že bez monády (funkcí class Monad) nelze vytvořit program, který načte a vypíše řetězec, dalo by se potom tvrdit, že IO v haskellu nemá nic společného s monádama?
btw to trochu delší tvar mé první reakce na ten článek

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Jak si rozšiřujete své vědomosti?
« Odpověď #171 kdy: 15. 04. 2016, 20:40:34 »
...
No domnivam se (a klidne muzu mylit), ze se docela dlouho da vystacit s mlhavym chapanim, ze to je "takovej ten divnej kontejner, co se pri praci s nim musi pouzivat do". Nemuzu to potvrdit z vlastni zkusenosti, protoze co je to monada snad vim, ale prakticky jsem v Haskellu nic vetsiho nedelal. Nicmene neslysim prvne, ze to nekdo z vlastni zkusenosti potvrzuje:

No začátečník IMO prostě použije "do" notaci v IO monadu v vůbec nepotřebuje vědět, co monada je. Poměrně brzo narazí na rozdíl mezi "pure" a "monadic" výpočtem, tak se s tím nějak popere (vezme to jako nějakou "divnou" kontejnerizaci) a pořád nemusí tušit, co to monáda je. A program už může napsat docela slušný.
...

Muzu potvrdit. Nas skolni tymovy projekt v Haskellu takto zacinal ("musi se tam placnout do a pouzivat ta sipka" ;D). Dale nasledovalo zdeseni, ze to divne "IO" se musi vsude na desitkach mist dopsat, aby se to vubec prelozilo - doslova jsme si rikali, ze nam to IO infikovalo cely kod. Ke konci projektu jsme snad dokonce i zacinali chapat, o co jako ze asi jde. BTW teorie z prednasky nam byla uplne na pendrek, to uz vice nam daly cvika, kde se naopak jelo spise vyhradne na prakticke priklady.
Přesně od toho cvika jsou :)

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #172 kdy: 15. 04. 2016, 20:47:12 »
Muzu potvrdit. Nas skolni tymovy projekt v Haskellu takto zacinal ("musi se tam placnout do a pouzivat ta sipka" ;D). Dale nasledovalo zdeseni, ze to divne "IO" se musi vsude na desitkach mist dopsat, aby se to vubec prelozilo - doslova jsme si rikali, ze nam to IO infikovalo cely kod. Ke konci projektu jsme snad dokonce i zacinali chapat, o co jako ze asi jde. BTW teorie z prednasky nam byla uplne na pendrek, to uz vice nam daly cvika, kde se naopak jelo spise vyhradne na prakticke priklady.
No a tohle je presne ta tragedie. A presne proto si myslim, ze by Elm byl jako intro-jazyk lepsi a prejit od nej na Haskell by pak uz tolik nebolelo. Napr. si vem, ze by ses tenkrat nemusel ucit nejakou "IO monadu", ale dozvedel by ses, ze putStr ma treba takovyhle typ (ilustracni priklad!):

Kód: [Vybrat]
putStr :: String -> Task

a getStr takovyhle:

Kód: [Vybrat]
getStr :: Task String

- hned by ti bylo jasny, ze putStr vytvari prikaz pro runtime, aby neco vypsal. A ze ten prikaz je proste jenom nejaka datova struktura, kterou muzes klidne predavat z (ciste) funkce sem a tam, ruzne transformovat, retezit, cokoli... ale k tomu, abys z "Task String" dostal ten String, musis ten Task String nejak "spustit", coz se uvnitr toho jazyka udelat neda.

Vubec bys nepotreboval dumat nad nejakymi monadami a milionem roztodivnych operatoru, ktere funguji jenom kdyz se zapisou v nejakem magickem poradi, ktere nikdo nechape a je potreba to proste vyzkouset ;)

...no a az by vsichni pracovali s Tasky jako kdyz lambdou mrska, tak by ctihodny pan profesor prisel s fascinujici otazkou: "A panove a damy, ze nevite, co ma spolecneho List a Task?" :)) Nekdo by tu nasledujici odpoved dal, nekdo ne, ale Tasky by chapali vsichni. Protoze - jak rika ten clanek, co mi pry odporuje - prvne potrebuje clovek videt neco konkretniho a pak teprve se posunout k abstrakci.

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #173 kdy: 15. 04. 2016, 20:54:43 »
možná se pletu, moje znalost haskellu je spíš praktického ražení, ale myslím, že bez monády (funkcí class Monad) nelze vytvořit program, který načte a vypíše řetězec,
Tak to je právě podle mě nepravdivé a i docela snadno vyvratitelné tvrzení: k tomu, abych dělal IO, potřebuji ty operace. Nepotřebuju třídu Monad jako takovou. A to ani v Haskellu, pokud se nepletu.

Něco jiného je, že standardní knihovna Haskellu obsahuje spoustu šikovných fcí, které pracují právě jenom s monádami. Nebo že se s monadickými typy v Haskellu píše příjemně.

Tak jako tak by to ale šlo napsat bez (obecného) typu Monad x, přesně tak, jak to má právě ten Elm.

dalo by se potom tvrdit, že IO v haskellu nemá nic společného s monádama?
Ano, dalo. Protože IO v Haskellu je IO. Monáda je abstrakce, která vystihuje společné vlastnosti (např.) IO a Listu.

v

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #174 kdy: 15. 04. 2016, 20:56:56 »
možná se pletu, moje znalost haskellu je spíš praktického ražení, ale myslím, že bez monády (funkcí class Monad) nelze vytvořit program, který načte a vypíše řetězec,
Tak to je právě podle mě nepravdivé a i docela snadno vyvratitelné tvrzení: k tomu, abych dělal IO, potřebuji ty operace. Nepotřebuju třídu Monad jako takovou. A to ani v Haskellu, pokud se nepletu.
nuže?

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #175 kdy: 15. 04. 2016, 21:00:25 »

v

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #176 kdy: 15. 04. 2016, 21:01:43 »
nuže?
Nuže co?
ten program :)
můj by vypadal takhle:
main = getLine >>= putStrLn

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #177 kdy: 15. 04. 2016, 21:06:31 »
ten program :)
můj by vypadal takhle:
main = getLine >>= putStrLn
A můj by vypadal takhle:
Kód: [Vybrat]
main = getLine' >>=' putStrLn'
...přičemž sémantika by byla úplně stejná a typy jsem už popsal: http://forum.root.cz/index.php?topic=13078.msg163624#msg163624

Ještě to pořád není jasné? Musím fakt oprášit ghc a napsat to skutečně se vším všudy?!

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:Jak si rozšiřujete své vědomosti?
« Odpověď #178 kdy: 15. 04. 2016, 21:15:12 »
Souhlas s tim Elmem. Nebo kdyby alespon nejdrive polopate neakademicky rekl, cemu ze to IO odpovida a k cemu to tam je a az pak presel k presne teorii :-\. Myslim si, ze je to i problem s motivaci - kdyz student nevi, k cemu mu ta abstrakce bude, protoze prednasejici se k necemu takovemu, jako jsou strucne ukazky z praxe, prece nesnizi, tak to ten student jednoduse bude brat jako dalsi sekvenci: nasprtat se -> vyblit na pisemku -> zapomenout. Timto problemem na FITu trpelo hodne predmetu, treba i ta teoreticka informatika nebo matematiky. A pritom teorie ze vsech tech predmetu se davno v praxi pouziva (asi ne vse, ale dost).

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #179 kdy: 15. 04. 2016, 21:20:41 »
Souhlas s tim Elmem. Nebo kdyby alespon nejdrive polopate neakademicky rekl, cemu ze to IO odpovida a k cemu to tam je a az pak presel k presne teorii :-\. Myslim si, ze je to i problem s motivaci - kdyz student nevi, k cemu mu ta abstrakce bude
Přesně! Jsem rád, že aspoň někdo mě pochopil, už mi z toho bylo skoro úzko :)

On by tenhle postup měl i ještě jednu parádní výhodu: když bys napsal trochu delší kód v Elmu, narazil bys na to, že musíš docela často určité obraty opakovat, protože jednou to děláš pro Task, jindy pro List... No a to by byl ten pravý čas přijít se zlatým grálem: jakmile by studenti začali brblat, že musí psát boilerplate, přišel by slovutný pan profesor s "ale to víte, studenti moji milí a drazí, že to jde i jinak! Stačí, když nad všemi těmihle typy budete mít jednu abstrakci, a pak vám to stačí napsat jednou, obecně, a bude vám to fungovat nad Listem i Taskem! Hele, té abstrakci se říká monáda... (studenti ani nedýchají nedočkavostí ;) )