🙂

[Haskell勉強中]:割り算でハマった話

2023/02/12に公開

Haskellで割り算の計算結果を使おうとしたところ、怒られてしまいました。

ghci> length [1, 2, 3] / 3

<interactive>:239:18: error:
    ? No instance for (Fractional Int) arising from a use of/? In the expression: length [1, 2, 3] / 3
      In an equation forit: it = length [1, 2, 3] / 3

なんでやー
この計算は出来るのに…

ghci> 3 / 3
1.0

他の方のブログで、上記の場合は「実数」として処理しているからだ。という解説がありました。
同じ3でも型の扱いが違うということなのかもしれません。

Haskellは数字の型が厳しいようですね。

エラーメッセージ的には、割り算の関数 (/) は、Fractional型(分数?)と Int を同時に扱えないよ。ということなのかもしれません。
https://hackage.haskell.org/package/base-4.17.0.0/docs/Prelude.html#v:-47-

※ドキュメントを読んでも理解しきれず…

ちなみに下記なら大丈夫です。

ghci> length [1, 2, 3] `div` 2          
1

div 関数は、整数(Integer)の割り算を扱えるようです。(小数点以下は切り捨て)
https://hackage.haskell.org/package/base-4.17.0.0/docs/Prelude.html#v:div

Haskellは数字の型が多いなぁ

Discussion