GHCi がどのように整数型を想定しているかについて質問があります。
Learn you a Haskell の Yes-No 型クラスを読んでいました。
全文読みたい方はこちらのリンクからどうぞ。 http://learnyouahaskell.com/making-our-own-types-and-typeclasses#a-yes-no-typeclass
簡単に言えば、この章では、独自のクラスを定義することで、多くの型で動作する関数を作成できることを示しています。
この本では、関数を使用して YesNo クラスを定義しています
yesno :: a -> Bool
IntYesNoクラスのインスタンスとして作る
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 0isと見なしていることを意味しIntegerます。
では、GHCi で整数を入力すると、通常はその値Integerが :t 0返品するので迷っていますNum a => a