Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 有人能给我解释一下这个代码是怎么工作的吗?_Haskell - Fatal编程技术网

Haskell 有人能给我解释一下这个代码是怎么工作的吗?

Haskell 有人能给我解释一下这个代码是怎么工作的吗?,haskell,Haskell,我定义了新类型,如下面的“PositiveInteger” newtype PositiveInteger = PositiveInteger Integer deriving Show fromPositiveInteger :: PositiveInteger -> Integer fromPositiveInteger (PositiveInteger i) = i toPositiveInteger :: Integer -> PositiveInteger toPosi

我定义了新类型,如下面的“PositiveInteger”

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
的有效参数