This is how floating point arithmetic works (in any language, not just Haskell) so you don't want floating point. See, for example, this question.
You can use Rational
from Data.Ratio for working with exact rational numbers:
ghci> import Data.Ratio
ghci> 0.2 :: Rational
1 % 5
ghci> 0.2 * 0.2 :: Rational
1 % 25
If you want to convert it back to floating point (which could potentially result in floating point errors as well, due to the nature of floating point), you can use fromRat
from Numeric
:
ghci> import Numeric
ghci> fromRat ((0.2 * 0.2) :: Rational)
4.0e-2
A side note about Haskell's numeric literals
This isn't casting (Haskell doesn't have casting, at least not in this sense). Numeric literals are overloaded, so they can take on any type that is an instance of the Num
type class. It isn't necessary to understand this fully right now, but it is good to know and look into at some point.