Názor k článku Úvod do jazyka Reason: varianty, pattern matching a ošetřování chyb od Radek Miček - Můžeš prosím rozvést, proč tak zdůrazňuješ tuto skutečnost? Jeden...

  • Článek je starý, nové názory již nelze přidávat.
  • 13. 2. 2018 9:26

    Radek Miček (neregistrovaný)

    Můžeš prosím rozvést, proč tak zdůrazňuješ tuto skutečnost?

    Jeden z rozdílů je v automatické generalizaci. Například tohle funguje

    let id = (x) => x;
    
    let x = Some(id);

    a x má očekávaný typ option(('a) => 'a). Zatímco tohle nefunguje

    let some(x) = Some(x);
    
    let x' = some(id);

    x' dostane typ option(('_a) => '_a) a kompilátor vypisuje chybu This expression's type contains type variables that can't be generalized. Rozdíl je jen v tom, že jednou používáme konstruktor Some a podruhé funkci some. Je to důsledkem relaxed value restriction, což je omezení, které dovoluje generalizovat pouze typy hodnot (a mezi hodnoty spadají konstruktory a nespadají tam volání funkcí).