Ve zkratce. Uniqueness typing přidává do hry parametr času, není to moc vidět ale je to tak. V Haskellu parametr času není. Takže. Pokud máme objekt svět, pak v Haskellu nad tím jedním jedním objektem svět můžeme zavolat plno IO funkcí v různých vláknech, ty funkce vrátí svoje nové objekty svět a tak dál. Ve výsledku máme strašně moc objektů svět v jednu chvíli, a v různých vláknech. A tadá, race condition a nečistota.
A uniqueness typing? Kdyby sis pořádně přečetl tu wiki, už by ti to bylo jasný. Uniqueness objekt může mít za svůj život pouze jednu jedinou referenci na sebe. Takže, máme li objekt world, pak operace IO bere tento objekt world, a vrací nový, ale ten starý není možné použit více, reference se po jednom použití stala neplatnou, protože kdyby ne, začalo by na objekt ukazovat více referencí. Tím je zajištěna čistota, protože poté i IO funkce se stejnými argumenty vrátí stejný výsledek opakovaně, představ si to jako stroj času
. Nevýhoda je, že IO je možno realizovat pouze na jednom vlákně, a proto je mnohem lepší použít reaktivitu.
Díky za příspěvek. Sice si trochu praštěnej s tím věčným osočováním jak to dotyční nečtou a nechápou, ale jsou tu i jiní, ti jsou za polopatické vysvětlení rádi.
Jo, asi sem praštěnej, ale ono to fakt tak je, plno lidí prostě rači ignoruje argumenty, než aby museli změnit chápaní dané věci. Je to ironie, ale cizinci jsou v tomhle strašní, ty fakt člověka ignorují a při zmínce impure Haskell tě naférovku pošlou do zadeke abys nevířil stojaté vody.
Jako tady lidi začali diskutovat a myslet trošku o tom, co sem říkal. Což je fajn. Ale už mi to ignorování trošku vlezlo na mozek mno.