Haskell 哈斯克尔打印对

Haskell 哈斯克尔打印对,haskell,Haskell,我是哈斯克尔的新手。 我有新的类型 守则: newtype Pair a b = Pair (a,b) deriving (Eq,Show) instance (Num a,Num b) => Num (Pair a b) where Pair (a,b) + Pair (c,d) = Pair (a+c,b+d) Pair (a,b) * Pair (c,d) = Pair (a*c,b*d) Pair (a,b) - Pair (c,d) = Pair (a-c,

我是哈斯克尔的新手。 我有新的类型

守则:

newtype Pair a b = Pair (a,b)  deriving (Eq,Show)

instance (Num a,Num b) => Num (Pair a b) where
   Pair (a,b) + Pair (c,d) = Pair (a+c,b+d)
   Pair (a,b) * Pair (c,d) = Pair (a*c,b*d)
   Pair (a,b) - Pair (c,d) = Pair (a-c,b-d)
   abs    (Pair (a,b)) = Pair (abs a,    abs b) 
   signum (Pair (a,b)) = Pair (signum a, signum b) 
   fromInteger i = Pair (fromInteger i, fromInteger i)

main = do print Pair (1, 3)
当我试图用
ghc--make
编译文件时,我得到以下错误消息

BigNumber.hs:11:11:
    Couldn't match expected type `(t1, t2) -> t0'
                with actual type `IO ()'
    The function `print' is applied to two arguments,
    but its type `((a0, b0) -> Pair a0 b0) -> IO ()' has only one
    In a stmt of a 'do' block: print Pair (1, 3)
    In the expression: do { print Pair (1, 3) }

我的目标是创建一个对某种类型的
newtype
执行某些操作的文件,然后打印结果。

main
更改为

main = do print (Pair (1, 3))

或者(最好的选项,因为
main
由单个表达式组成)


您必须为
print
提供一个参数,而不是2。

main
更改为

main = do print (Pair (1, 3))

或者(最好的选项,因为
main
由单个表达式组成)


您必须为打印提供一个参数,而不是2。

请注意:这不是打字错误,而是优先权问题。@AndrewC Full ACK。我认为这是Haskell初学者最讨厌的陷阱之一,因为你看不出自己做错了什么。投票决定是否继续开放。请向SO用户注意:这不是打字错误,而是优先权问题。@AndrewC Full ACK。我认为这是Haskell初学者最讨厌的陷阱之一,因为你看不出自己做错了什么。投票决定不开放。
main = print $ Pair (1, 3)