Haskell 什么';这是转换字符串的好方法;2.0“;到一个通用的分数和;2“;到通用Num?
在GHCi中,我们可以Haskell 什么';这是转换字符串的好方法;2.0“;到一个通用的分数和;2“;到通用Num?,haskell,Haskell,在GHCi中,我们可以 ghci> :t 2.0 2.0 :: Fractional t => t 因此,很自然地会问,如何将字符串“2.0”(从外部数据源解析)转换为分数t=>t 类似地,如何将“2”转换为Num t=>t 我想有多种方法可以做到这一点。你最喜欢哪一个? (作为Haskellers,我们喜欢漂亮的解决方案。)在GHCI中: λ> read "2.0" :: (Read a, Fractional a) => a 2.0 λ> read "2" :
ghci> :t 2.0
2.0 :: Fractional t => t
因此,很自然地会问,如何将字符串“2.0”
(从外部数据源解析)转换为分数t=>t
类似地,如何将“2”
转换为Num t=>t
我想有多种方法可以做到这一点。你最喜欢哪一个?
(作为Haskellers,我们喜欢漂亮的解决方案。)在GHCI中:
λ> read "2.0" :: (Read a, Fractional a) => a
2.0
λ> read "2" :: (Read a, Num a) => a
2
在GHCI中:
λ> read "2.0" :: (Read a, Fractional a) => a
2.0
λ> read "2" :: (Read a, Num a) => a
2
我不知道它是否美丽。但是,我们可以这样做
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
我不知道它是否美丽。但是,我们可以这样做
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
首先,最好不要将
“2.0”
作为字符串但是,.@leftaroundabout您指的是使用适当数字类型存储2.0的数据库吗?(纯文本csv文件没有这个功能,但我同意这并不漂亮。)美丽就是永远不会将“2.0”
作为字符串,首先但是,.@leftaroundabout您指的是使用适当数字类型存储2.0的数据库吗?(纯文本csv文件没有这个功能,但我肯定,这并不漂亮。)