Лучший способ в современном Haskell - использовать приложение типа .
Prelude> :set -XTypeApplications
Prelude> map (read @Double) ["1.22","3.33","5.55"]
[1.22,3.33,5.55]
Prelude> map (read @Int) ["1.22","3.33","5.55"]
[*** Exception: Prelude.read: no parse
Это работает, потому что read
имеет подпись
read :: ∀ a . Read a => String -> a
и, следовательно,read @Double
специализируется a ~ Double
и, следовательно,
read @Double :: String -> Double