Jednou si přečíst wiki stránku (a náhodou přeskočit první větu která ozřejmuje proč to vlastně funguje a jakou to má nevýhodu), a nekouknout se jak to vlastně funguje v nějakém jazyce je k ničemu. Napřed prosím plně pochop princip, a pak o něm diskutuj. Normálně bych začal vysvětlovat jak vlastně uniqueness typing funguje ALE, ne už jsem unavený, už jsem mockrát něco vysvětloval jen pro to aby to druhá strana vůbec nepřečetla a ani se nad tím nezamyslela.
jo, možná nechápu
tvrdím, že jazyk s uniqness typing (dle examplu z wiki) je stejně "pure-dle čumila" jako jazyk s haskellovskou IO monádou, můžete to vyvráti?
Jo ... můžu.
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.