2008年04月26日

[Haskell] 型チェックは意外と厳しい

   このエントリーをはてなブックマークに追加 Clip to Evernote
getAverage :: (Fractional a) [a] -> a
getAverage xs = div (sum xs) (length xs)

という関数を書いてみた。

最初の行では、aという型がFractionalクラスに属していることを示している。
Fractionalクラスは、小数点を扱える数値型。

でもなぜかコンパイルエラーになった。なんか型が一致しないようだ。
なぜ?

sum xs / (length xs)

って書いてもだめ。

調べてみると、この場合割り算の分子は、Fractionalである必要があるので、
fromIntegral で型変換をする必要がある。

getAverage xs = sum xs / fromIntegral (length xs)

C#のキャストのようなものかな。

Haskellの型チェックって見た目以上に厳しいようだ。


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/51491963