Haskell 有人能给我解释一下这个代码是怎么工作的吗?
我定义了新类型,如下面的“PositiveInteger”Haskell 有人能给我解释一下这个代码是怎么工作的吗?,haskell,Haskell,我定义了新类型,如下面的“PositiveInteger” newtype PositiveInteger = PositiveInteger Integer deriving Show fromPositiveInteger :: PositiveInteger -> Integer fromPositiveInteger (PositiveInteger i) = i toPositiveInteger :: Integer -> PositiveInteger toPosi
newtype PositiveInteger = PositiveInteger Integer deriving Show
fromPositiveInteger :: PositiveInteger -> Integer
fromPositiveInteger (PositiveInteger i) = i
toPositiveInteger :: Integer -> PositiveInteger
toPositiveInteger x
| (x < 0) = error "Not applicable to negative numbers"
| otherwise = PositiveInteger x
newtype PositiveInteger=PositiveInteger整数派生显示
fromPositiveInteger::PositiveInteger->Integer
fromPositiveInteger(PositiveInteger i)=i
toPositiveInteger::整数->正整数
地形积分仪
|(x<0)=错误“不适用于负数”
|否则=正整数x
当我执行语句“fromPositiveInteger(10)”时,我得到以下错误。这是绝对好的
*Main> fromPositiveInteger (10)
<interactive>:7:22:
No instance for (Num PositiveInteger) arising from the literal ‘10’
In the first argument of ‘fromPositiveInteger’, namely ‘(10)’
In the expression: fromPositiveInteger (10)
In an equation for ‘it’: it = fromPositiveInteger (10)
*Main>来自正整数(10)
:7:22:
没有由文字“10”产生的(Num PositiveInteger)实例
在“fromPositiveInteger”的第一个参数中,即“(10)”
在表达式中:fromPositiveInteger(10)
在“it”的方程式中:it=fromPositiveInteger(10)
假设,如果我像下面这样更新代码。语句“fromPositiveInteger 10”工作正常,没有任何错误。这怎么会发生
newtype PositiveInteger = PositiveInteger Integer deriving Show
fromPositiveInteger :: PositiveInteger -> Integer
fromPositiveInteger (PositiveInteger i) = i
toPositiveInteger :: Integer -> PositiveInteger
toPositiveInteger x
| (x < 0) = error "Not applicable to negative numbers"
| otherwise = PositiveInteger x
instance Num PositiveInteger where
fromInteger = toPositiveInteger
x + y = toPositiveInteger (fromPositiveInteger x + fromPositiveInteger y)
x - y = let r = fromPositiveInteger x - fromPositiveInteger y in
if r < 0 then error "Unnatural subtraction"
else toPositiveInteger r
x * y = toPositiveInteger (fromPositiveInteger x * fromPositiveInteger y)
*Main> fromPositiveInteger (PositiveInteger 10)
10
*Main> fromPositiveInteger 10
10
newtype PositiveInteger=PositiveInteger整数派生显示
fromPositiveInteger::PositiveInteger->Integer
fromPositiveInteger(PositiveInteger i)=i
toPositiveInteger::整数->正整数
地形积分仪
|(x<0)=错误“不适用于负数”
|否则=正整数x
实例Num PositiveInteger,其中
fromInteger=拓扑位置指示器
x+y=地形积分仪(从正积分仪x+从正积分仪y)
x-y=设r=from正整数x-from正整数y in
如果r<0,则错误为“非自然减法”
其他地形情报员
x*y=地形积分仪(从正积分仪x*从正积分仪y)
*主>来自正整数(正整数10)
10
*主>来自正整数10
10
由于PositiveInteger
现在是Num
的一个实例,10
(其最常用的类型是Num a=>a
)可以具有PositiveInteger
类型,这使得它成为PositiveInteger的的有效参数,因为PositiveInteger
现在是Num
的一个实例,10
(其最常用的类型是Num a=>a
)可以具有类型PositiveInteger
,使其成为fromPositiveInteger
的有效参数