2017-06-23 5 views
1

GHCiので、私たちは、だから、どのように一つはFractional t => tへ(外部データソースから解析された)文字列"2.0"を変換しない、頼むのは自然だ文字列「2.0」を汎用分数に、「2」を汎用Numに変換するにはどうすればよいですか?

ghci> :t 2.0 
2.0 :: Fractional t => t 

を行うことができますか?

同様に、"2"Num t => tに変換する方法はありますか?

私はこれを行うには複数の方法があると思います。あなたのお気に入りはどちらですか? GHCiの中 (Haskellersとして、私たちは美しいソリューションが好き。)

+2

美しいのは、最初は_string_として使用することではありません...しかし、[両方の関数は](http://hackage.haskell.org/package /base-4.9.1.0/docs/Numeric.html#v:readInt)[Numericモジュールの 'base'で利用できます](http://hackage.haskell.org/package/base-4.9.1.0/ docs/Numeric.html#v:readFloat)。 – leftaroundabout

+0

@leftaroundabout 2.0を適切な数値型で格納するデータベースを参照していますか? (プレーンテキストのcsvファイルにはそれがありませんが、確かに、それは美しくはないことに同意します)。 – haskellHQ

答えて

4

λ> read "2.0" :: (Read a, Fractional a) => a 
2.0 
λ> read "2" :: (Read a, Num a) => a 
2 
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 
関連する問題