【发布时间】:2014-05-05 23:36:51
【问题描述】:
我是 Haskell 的新手。 我得到了新类型pair which overloads plus operator
代码:
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 执行某些操作的文件,然后打印出结果。
【问题讨论】:
-
SO 用户注意:这不是错字问题 - 这是一个优先问题。
-
@AndrewC 完全确认。我认为这是 Haskell 初学者最烦人的陷阱之一,因为你看不到自己做错了什么。投票保持开放。
标签: haskell