GHCi がどのように整数型を想定しているかについて質問があります。
Learn you a Haskell の Yes-No 型クラスを読んでいました。
全文読みたい方はこちらのリンクからどうぞ。 http://learnyouahaskell.com/making-our-own-types-and-typeclasses#a-yes-no-typeclass
簡単に言えば、この章では、独自のクラスを定義することで、多くの型で動作する関数を作成できることを示しています。
この本では、関数を使用して YesNo クラスを定義しています
yesno :: a -> Bool
Int
YesNoクラスのインスタンスとして作る
instance YesNo Int where
yesno 0 = False
yesno _ = True
これをGHCiにロードして入力したとき
yesno 0
エラーを返しました。おそらく、GHCi は 0 がクラス内の他の型であるInt
かInteger
、またはDouble
その他の型であるかを判断できないためだと思いました。Num
実際に yesno (0::Int) と入力すると、うまくいきました。
楽しみのために、クラスInteger
のインスタンスとして作成し、YesNo
書きました
instance YesNo Integer where
yesno 0 = True
yesno _ = False
(True と False を反転したことに注意してください)、もう一度入力します
yesno 0
(型宣言なし) GHCi は を示しTrue
ました。
さらに、私がタイプしたとき
yesno $ fromIntegral 0
これはTrue
、GHCi が の型をfromIntegral 0
isと見なしていることを意味しInteger
ます。
では、GHCi で整数を入力すると、通常はその値Integer
が :t 0
返品するので迷っていますNum a => a