在Haskell中制作Integral类的新类型实例

时间:2018-11-17 22:54:49

标签: haskell newtype

我想创建我的Integral类的新类型实例。 我的新类型:

newtype NT = NT Integer deriving (Eq,Ord,Show)

我希望能够对自己的divnewtype 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实例吗?

0 个答案:

没有答案