Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 什么';这是转换字符串的好方法;2.0“;到一个通用的分数和;2“;到通用Num?_Haskell - Fatal编程技术网

Haskell 什么';这是转换字符串的好方法;2.0“;到一个通用的分数和;2“;到通用Num?

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中,我们可以

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文件没有这个功能,但我肯定,这并不漂亮。)