Пара вопросов
1. Всегда ли чистые функции для одинаковых аргументов выполняются один раз? То есть
f yy = (yy, myCalc $ head yy)
g = (myCalc y, f [y])
и
f yy x = (yy, x)
g = let x = myCalc y
(x, f [y] x)
2. Какой аналог для i++ в IORef?
x <- readIORef i
let y = x + 1
writeIORef i y
return y
можно сделать короче?