Názor k článku Recenze knihy Functional Thinking (Paradigm over syntax) od Radek Miček - > Ne. Komunikace mezi thready je v IO,...

  • Článek je starý, nové názory již nelze přidávat.
  • 10. 4. 2016 10:01

    Radek Miček (neregistrovaný)

    > Ne. Komunikace mezi thready je v IO, takže se je potřeba ze StateT vyliftovat ven, poslat stav jinam a v přijímacím threadu to zase spustit přes runStateT nebo. nějaký "local". Takže threadLocal by určitě fungoval.

    Máte pravdu v Haskellu to zřejmě bude, jak říkáte - nedošlo mi (dokud jsem si to nezkusil), že forkovací funkce berou IO x a nikoliv StateT s IO x. V jazycích, kde můžete funkci přerušit (například pomocí vymezených kontinuací) a pak pustit na jiném vlákně, se stavová monáda bude lišit od thread local proměnné.

    > Zrovna algebr. datové typy a polymorfismus jsou něco, co v kódu vypadá prakticky přesně "opačně" a z hlediska rozšiřitelnosti to má opačné vlastnosti

    Měl jsem na mysli to, že u data X = A | B | C můžete X chápat jako nadtyp a A, B, C jako podtypy. Toto chápání nám dovolí ADT modelovat v OO jazyce - X, A, B, C budou třídy a zakázáním vytváření dalších podtypů z X, A, B a C dostaneme ADT jako v Haskellu. Když podtypy nezakážete dostanete otevřený ADT, to umí například OCaml (samozřejmě umí i uzavřené):

    type attr = ..
    
    type attr += Str of string
    
    type attr +=
      | Int of int
      | Float of float