Haskellで2つのInt
値を分割し、結果をFloat
として取得したいと思います。私はこのようにそれをやってみました:
foo :: Int -> Int -> Float
foo a b = fromRational $ a % b
しかし、GHC(バージョン6.12.1)は、式のa
に関して、「期待される型「整数」を推測される型「整数」と一致させることができませんでした」と言っています。
理由は理解できます。fromRational
呼び出しでは(%)
を生成するためにRatio Integer
が必要なので、オペランドはInteger
ではなくInt
型である必要があります。しかし、私が分割している値はInt
の範囲制限にほど遠いので、任意精度のbignum型を使用するのはやり過ぎのようです。
これを行う正しい方法は何ですか?オペランドでtoInteger
を呼び出す必要がありますか、それとも私が知らないより良いアプローチ((%)
と比率を含まないアプローチ)がありますか?
オペランドを浮動小数点数に変換する必要があります最初次に除算します。そうでない場合は、整数除算(小数点以下の桁数なし)を実行します。
簡潔な解決策(Data.Function
が必要)
foo = (/) `on` fromIntegral
の略です
foo a b = (fromIntegral a) / (fromIntegral b)
と
foo :: Int -> Int -> Float