在GHCi中,我们可以做到
ghci> :t 2.0
2.0 :: Fractional t => t
所以很自然地问,如何将字符串"2.0"
(从外部数据源解析)转换为Fractional t => t
?
同样,如何将"2"
转换为Num t => t
?
我想有多种方法可以做到这一点。哪个是你最喜欢的? (作为Haskellers,我们喜欢漂亮的解决方案。)
答案 0 :(得分:4)
GHCI:
λ> read "2.0" :: (Read a, Fractional a) => a
2.0
λ> read "2" :: (Read a, Num a) => a
2
答案 1 :(得分:3)
我不知道它是否漂亮。但是,我们可以这样做。
Prelude> (fromInteger . read) "2"
2
Prelude> :type it
it :: Num c => c
Prelude> (fromRational . (toRational :: Double -> Rational) . read) "2.0"
2.0
Prelude> :type it
it :: Fractional c => c