Это результат неточности значений с плавающей запятой , это не относится к Haskell. Если вы не можете справиться с аппроксимацией, присущей плавающей запятой, то вы можете использовать Rational с высокой производительностью:
> import Data.Ratio
Data.Ratio> [0,1%10.. 1%1]
[0 % 1,1 % 10,1 % 5,3 % 10,2 % 5,1 % 2,3 % 5,7 % 10,4 % 5,9 % 10,1 % 1]
Чтобы забить точку дома, вот Python :
>>> 0.3
0.29999999999999999
И вот C:
void main() { printf("%0.17f\n",0.3); }
$ gcc t.c 2>/dev/null ; ./a.out
0.29999999999999999