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

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Jak si rozšiřujete své vědomosti?
« Odpověď #180 kdy: 15. 04. 2016, 21:21:44 »
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).

Tak ono to platí obecně, už Komenský říkal - byť jinými slovy - že je nutné postupovat od konkrétního k abstraktnímu. Pokud někdo narazí na špatného učitele, tak to je samozřejmě problém a může to celou látku znechutit. Proto naštěstí máme na VŠ různé ankety a student aspoň ví, ke komu se (ne)zapsat.


v

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #181 kdy: 15. 04. 2016, 21:23:29 »
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?!
no třeba to jde takhle unsafePerformIO (putStrLn (unsafePerformIO getLine)) :D

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #182 kdy: 15. 04. 2016, 21:25:35 »
no třeba to jde takhle unsafePerformIO (putStrLn (unsafePerformIO getLine)) :D
Žádné unsafePerformIO! Normálně úplně čistě, stejně jako ten tvůj kód. Byl by tam jediný rozdíl: ty moje fce by nebyly napsané obecně pro Monad, ale konkrétně jenom pro IO. Takže slovo "Monad" by se tam vůbec nevyskytovalo (což je ta pointa, ne?)

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:Jak si rozšiřujete své vědomosti?
« Odpověď #183 kdy: 15. 04. 2016, 21:45:05 »
...
Pokud někdo narazí na špatného učitele, tak to je samozřejmě problém a může to celou látku znechutit. Proto naštěstí máme na VŠ různé ankety a student aspoň ví, ke komu se (ne)zapsat.

Jestli mluvite zvlast o predmetech, kam se zapsat a kam ne, tak to v tomto pripade jaksi nelze aplikovat - vsechny ty vyjmenovane predmety jsou na FITu (VUT Brno) povinne a uci je vzdy prave jeden prednasejici (neni vic variant) :(. Dotazniky se sice na konci semestru vyplnuji, ale podle toho co jsem slysel jsou stejne jen pro garanta a vedeni z toho zadne dusledky nevyvozuje = jsou k nicemu.

Kdyz nad tim tak premyslim, tak mozna prave proto jsou ty predmety tak spatne, protoze jsou povinne, takze nemuze nastat situace, ze se mezi studenty rozkrikne, jak nizkou uroven ma vyuka a nikdo si ten predmet nezapise. Maji proste takovy "monopol", muzou si byt jak chteji spatni :(.

v

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #184 kdy: 15. 04. 2016, 21:45:30 »
no třeba to jde takhle unsafePerformIO (putStrLn (unsafePerformIO getLine)) :D
Žádné unsafePerformIO! Normálně úplně čistě, stejně jako ten tvůj kód. Byl by tam jediný rozdíl: ty moje fce by nebyly napsané obecně pro Monad, ale konkrétně jenom pro IO. Takže slovo "Monad" by se tam vůbec nevyskytovalo (což je ta pointa, ne?)
tak ukažte


Re:Jak si rozšiřujete své vědomosti?
« Odpověď #185 kdy: 15. 04. 2016, 21:50:14 »
tak ukažte
Nejspíš jsem se v tomhle zmýlil, ono to uvnitř Haskellu asi nejde, protože nejde ani zúžit typ (>>=) na konkrétní monádu, ani definovat vlastní (>>=). Muselo by se to asi udělat v runtimu.

Každopádně to na věci nic nemění. Prostě místo
Kód: [Vybrat]
(>>=) :: Monad m => m a -> (a -> m b) -> m b
by bylo potřeba mít
Kód: [Vybrat]
(>>=) :: IO a -> (a -> IO b) -> IO b
a měli bysme triviálně IO bez monády.


v

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #186 kdy: 15. 04. 2016, 21:59:02 »
tak ukažte
Nejspíš jsem se v tomhle zmýlil, ono to uvnitř Haskellu asi nejde, protože nejde ani zúžit typ (>>=) na konkrétní monádu, ani definovat vlastní (>>=). Muselo by se to asi udělat v runtimu.

Každopádně to na věci nic nemění. Prostě místo
Kód: [Vybrat]
(>>=) :: Monad m => m a -> (a -> m b) -> m b
by bylo potřeba mít
Kód: [Vybrat]
(>>=) :: IO a -> (a -> IO b) -> IO b
a měli bysme triviálně IO bez monády.
nejde to, ale na věci to nic nemění?

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #187 kdy: 15. 04. 2016, 22:02:25 »
nejde to, ale na věci to nic nemění?
No nejde zřejmě to demonstrovat tak, jak jsem myslel. Muselo by se zasáhnout do zdrojáků překladače nebo použít nějaké kejkle, které já neumím.

Ale to je úplně jedno, vy si fakt neumíte představit, že by (>>=) prostě bylo definováno JENOM pro IO? Takže by to "Monad m" vůbec v jeho typu nefigurovalo?

v

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #188 kdy: 15. 04. 2016, 22:06:49 »
nejde to, ale na věci to nic nemění?
No nejde zřejmě to demonstrovat tak, jak jsem myslel. Muselo by se zasáhnout do zdrojáků překladače nebo použít nějaké kejkle, které já neumím.

Ale to je úplně jedno, vy si fakt neumíte představit, že by (>>=) prostě bylo definováno JENOM pro IO? Takže by to "Monad m" vůbec v jeho typu nefigurovalo?
což o to, já si to představit umím, ale tak to prostě není
i ten článek na který jste odkazoval to zmiňuje:
"“I have to directly use the result of one IO action in order to decide which IO action should happen next”: Yes, this is a use case for IO’s monadic interface."

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Jak si rozšiřujete své vědomosti?
« Odpověď #189 kdy: 15. 04. 2016, 22:08:08 »
...
Pokud někdo narazí na špatného učitele, tak to je samozřejmě problém a může to celou látku znechutit. Proto naštěstí máme na VŠ různé ankety a student aspoň ví, ke komu se (ne)zapsat.

Jestli mluvite zvlast o predmetech, kam se zapsat a kam ne, tak to v tomto pripade jaksi nelze aplikovat - vsechny ty vyjmenovane predmety jsou na FITu (VUT Brno) povinne a uci je vzdy prave jeden prednasejici (neni vic variant) :(. Dotazniky se sice na konci semestru vyplnuji, ale podle toho co jsem slysel jsou stejne jen pro garanta a vedeni z toho zadne dusledky nevyvozuje = jsou k nicemu.

Kdyz nad tim tak premyslim, tak mozna prave proto jsou ty predmety tak spatne, protoze jsou povinne, takze nemuze nastat situace, ze se mezi studenty rozkrikne, jak nizkou uroven ma vyuka a nikdo si ten predmet nezapise. Maji proste takovy "monopol", muzou si byt jak chteji spatni :(.
Jo, já vím, někdy si prostě student vybrat nemůže :(


Re:Jak si rozšiřujete své vědomosti?
« Odpověď #191 kdy: 15. 04. 2016, 22:24:07 »
i ten článek na který jste odkazoval to zmiňuje:
"“I have to directly use the result of one IO action in order to decide which IO action should happen next”: Yes, this is a use case for IO’s monadic interface."
A to má dokazovat co? Je to řečeno v úplně jiném kontextu a říká to něco úplně jiného.

No nic, já už bych to nechal. Měl jste pravdu, že v současném Haskellu se skutečně asi použití slova "Monad" nedá vyhnout. Ne proto, že by to nešlo principielně, ale proto, že je to tak udělané. Každopádně to nic nemění na tom, co jsem tvrdil a nic to nemění ani na tom, co tvrdí ten článek. Jestli s tím nesouhlasíte, ok, mně už se to dál rozpitvávat nechce. Berte to jako že jste měl pravdu, jestli chcete, mně úplně stačí, že mi zřejmě porozuměl Andy a noef :)

Btw, vtipná berlička, jak se Monad vyhnout: http://stackoverflow.com/questions/17002119/haskell-pre-monadic-i-o - používá ale unsafePerformIO, takže to jako argument brát nebudete, to je mi jasný :)

v

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #192 kdy: 15. 04. 2016, 22:30:37 »
monády se taky dají vysvětlit velice jednoduše.
tak ukažte :)
Tak jsem to našel: https://blog.jcoglan.com/2011/03/05/translation-from-haskell-to-javascript-of-selected-portions-of-the-best-introduction-to-monads-ive-ever-read/
děkuji
"You Could Have Invented Monads!" jsem četl, tohle vypadá jako reimplementace v javascriptu, takže se mi to celé číst nechce

v

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #193 kdy: 15. 04. 2016, 22:38:29 »
i ten článek na který jste odkazoval to zmiňuje:
"“I have to directly use the result of one IO action in order to decide which IO action should happen next”: Yes, this is a use case for IO’s monadic interface."
A to má dokazovat co? Je to řečeno v úplně jiném kontextu a říká to něco úplně jiného.

No nic, já už bych to nechal. Měl jste pravdu, že v současném Haskellu se skutečně asi použití slova "Monad" nedá vyhnout. Ne proto, že by to nešlo principielně, ale proto, že je to tak udělané. Každopádně to nic nemění na tom, co jsem tvrdil a nic to nemění ani na tom, co tvrdí ten článek. Jestli s tím nesouhlasíte, ok, mně už se to dál rozpitvávat nechce. Berte to jako že jste měl pravdu, jestli chcete, mně úplně stačí, že mi zřejmě porozuměl Andy a noef :)

Btw, vtipná berlička, jak se Monad vyhnout: http://stackoverflow.com/questions/17002119/haskell-pre-monadic-i-o - používá ale unsafePerformIO, takže to jako argument brát nebudete, to je mi jasný :)
teď už asi i chápu, proč mezi vámi a zbojem dochází k těma sporům o logiky

Re:Jak si rozšiřujete své vědomosti?
« Odpověď #194 kdy: 15. 04. 2016, 22:39:23 »
teď už asi i chápu, proč mezi vámi a zbojem dochází k těma sporům o logiky
Myslím, že nechápete.