@alphaneet さんが Haskell の勉強の様子を Ust してた
↓
「Haskell 勉強したい、勉強したい」といいながら、結局最近あまりやれていないのを思い出し、自分もおもむろに ghci を立ち上げてみる
↓
let f 0 = 1
というとても単純な関数を定義してみる。
↓
:type コマンドでそれの型を調べたら
f :: (Eq a, Num a, Num a1) => a -> a1
ってなってる。
↓
あれ alphaneet さんのやつと違う・・・?ちなみに自分が今試していたのは 7.3.20111021 (このとき入れたもの)
↓
なぜか自分のPCに古いversion (6.12.1) のghciも入ってる
↓
そっちで試すと
f :: (Num t, Num t1) => t -> t1
ってなってる。
↓
あれ Eq の Instance が必要かどうかが異なってる・・・(´・ω・`)?
↓
:info コマンドで、Num や Eq や Integer について調べる
↓
以下のように Num が Eq の instance かどうかが異なってる
古い
Prelude> :info Num class (Eq a, Show a) => Num a where (+) :: a -> a -> a (*) :: a -> a -> a (-) :: a -> a -> a negate :: a -> a abs :: a -> a signum :: a -> a fromInteger :: Integer -> a -- Defined in GHC.Num instance Num Integer -- Defined in GHC.Num instance Num Int -- Defined in GHC.Num instance Num Float -- Defined in GHC.Float instance Num Double -- Defined in GHC.Float
新しい
class Num a where (+) :: a -> a -> a (*) :: a -> a -> a (-) :: a -> a -> a negate :: a -> a abs :: a -> a signum :: a -> a fromInteger :: Integer -> a -- Defined in `GHC.Num' instance Num Integer -- Defined in `GHC.Num' instance Num Int -- Defined in `GHC.Num' instance Num Float -- Defined in `GHC.Float' instance Num Double -- Defined in `GHC.Float'
あーなるほど・・・(・ω・`)なんとなくわかった・・・?
↓
さらにこれが切り替わったversionとか、切り替わった理由、(いやまてそもそも本当に設計が変わったのか? じぶんが単純なミスをしているだけなのか) を気になって調べる
↓
でもすぐに見つからなかったので諦めて、とりあえずアウトプットするためblog書いた ← イマココ
ここから追記
Numの親クラスにEq, Showがあるのはそもそもおかしいから変更入ったというのはいつかのしぇらーしぃさんのツイートで見たことある
そうか!ぐぐるより、 しぇらーしぃさん の twilog 検索すればよかったんや!
2012-01-23 23:54:28 via web
はい、見つかりましたーーー URL
2012-01-23 23:55:36 via web
しぇらーしぃさんありがとうございます。めでたしめでたし・・・?
せっかくなので、紹介されたリンク先を全部理解できなくてもいいからちょっと読もう・・・