【问题标题】:Haskell print PairHaskell 打印对
【发布时间】: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


【解决方案1】:

把你main改成

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

main = do print $ Pair (1, 3)

或(最好的选择,因为您的 main 包含一个表达式)

main = print $ Pair (1, 3)

你必须给 print 一个参数,而不是 2。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-07
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多