我想创建我的Integral类的新类型实例。 我的新类型:
newtype NT = NT Integer deriving (Eq,Ord,Show)
我希望能够对自己的div
做newtype NT
:
Prelude> (NT 5) `div` (NT 2)
2
因为:
Prelude> :t div
div :: Integral a => a -> a -> a
我应该创建NT
类的Integral
实例。
这是Integral
类的定义方式:
class (Real a, Enum a) => Integral a where
quot, rem :: a -> a -> a
div, mod :: a -> a -> a
quotRem, divMod :: a -> a -> (a,a)
toInteger :: a -> Integer
并且由于我只需要div
,所以我尝试了:
instance Integral NT where
(NT x) `div` (NT y) = (NT q) where (q,r) = divMod x y
或者我可以这样做吗?
instance Integral NT where
div (NT x) (NT y) = NT (div x y )
但是无论哪种方式我都会得到错误:
• No instance for (Real NT)
arising from the superclasses of an instance declaration
• In the instance declaration for ‘Integral NT’
我应该首先创建NT
类的Real
实例吗?