さて、Showが何か分からないので調べてみよう。
とはいえ、
Hoogleの説明はまだ良く分からない。GHCiを使って調べよう。
GHCiは:?でhelpを出してくれる。で、どうすればいいかな? ……
日本語訳を見ようw
:info [<name> ...] 指定された名前についての情報を表示する
これを使おう。ここには書いてないけど、:iでも使えるね。
簡単なものを試してみよう。
*Test> :i x
x :: Integer -- Defined at ./mm.hs:6:0
::は型を表すのに使う。xはInteger型だと言ってる。
(--)は一行コメントだ。Integerはとりあえず整数だと思っておこう。
じゃあ、Showを調べてみる。
*Test> :i Show
何か長々と表示されてしまった。まあ、少し読んでみよう。
class Show a where
Show aというのはクラスだ! クラスって何とか、aって何とは思うけど。
whereは、続く関数はその中で使われることを示しているんだった。
showsPrec :: Int -> a -> ShowS
show :: a -> String
showList :: [a] -> ShowS
だから、これらの関数はShowに属するものだ。クラスメソッドっていうのかな?
一番目、showsPrecは(Int -> a -> ShowS)という型であると言っているんだ。
右側の形は見たことがあるね。(a -> a -> a)これと同じ。hの情報を見てみよう!
*Test> :i h
h :: Num a => a -> a -> a
-- Defined ./mm.hs:4:0
また新しい記号が(ぉ
(Num a =>)これについては
スーパークラスで説明するので、今は保留。
h x y = x + yという形をしているから、最初の2つが引数、最後の1つが関数の値のようだ。
全部->で繋がっているのは、
h a -> a -> a
h a a -> a
ということも表しているかららしい。これも後で調べよう。
aは何でも入る型だ。でも、hではNum a =>で制約されているってことなんだろう。
Showに戻って、
instance Show Float -- Imported from GHC.Float
instance Show Double -- Imported from GHC.Float
:
:
instanceは、どうも型を指定してるみたい。
これは関数ではなくて、クラスに含まれるデータのことを示してるんだね。
オブジェクト指向ではよく使う言葉なのか。
とりあえず今回はここまで。次は
スーパークラスについて書かなくちゃいけないかな。
最終更新:2007年09月26日 05:27