セカイノカタチスマートフォン用の表示で見るセカイノカタチ世界のカタチを探求するブログ。関数型言語に興味があり、HaskellやScalaを勉強中。前回のH本読書会*1にて、Integralという型クラスの説明があったのですが(P33)、上手く解説できなかったので調べてみた。`GHC.Real'どうやら、RealとEnumの型制約が付いているようです。Realは、実数ですね。Enumは順序を示す型クラス。順序立てる事ができる実数を特化したものがIntegralという型になるということです。instanceを見ると、IntegerとIntが挙げられています。IntegerとIntという似た者同士をまとめて扱えるようです。関数を見てみると、quotやdivやmodなど掛けたり割ったりするようです。toIntegerがあるので、IntegerとIntは、Integralを通してIntegerに変換することが出来るみたいですね。本に解説のあった、「fromIntegral」関数ですが、IntとIntegerを引数にとって、Num型(Numは、IntやIntegerも属していますが、その他あらゆる(?)数値型を汎化したもっと守備範囲の広い型)に変換する関数なようです。bHaskellには暗黙的な自動変換がないので、演算に必要な型は自分で揃えてあげる必要があります。(+)(プラス)演算の定義はこんな感じになっているようです。a)となっている以上、第一引数と第二引数は同じ型でないとエラーとなります。b)となるため、型が合わずエラーです。(1::Int)そこで、fromIntegralの出番となり、明示的に型変換してあげることにより、コンパイルできるようになるわけです。型って素晴らしいですね。*1:「すごいHaskell楽しく学ぼう!」の読書会です。はてなブログProシステム開発の世界で15年の山の民による、世界のカタチを探求するブログ。(4)はてなブログをはじめよう!qtamakiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。