正确使用fromIntegral和不匹配的括号

时间:2015-10-24 22:10:39

标签: haskell

def :: (Int, Int) -> (Int, Int, Int)
def (x, y) 
| x == 0 && y == 0  = (0, 1, 0)
| otherwise = ( fromIntegral x/34, y, a )
  where a = x + y

始终收到错误缩进或括号不匹配的消息。甚至试图用where结构省略变量。此外,我不确定我是否做了声明和fromIntegral正确

1 个答案:

答案 0 :(得分:4)

你需要比周围的上下文(在这种情况下是def)更多地缩进警卫。您还有一些类型错误,其中大多数可以通过fromIntegral的自由应用来处理。我发现的另一个显而易见的事情是00不是三元组 - 或许你的意思是(0, 0, 0)而已?但是,如果你这样做,似乎第二个条款将会返回;所以也许你根本不需要任何警卫。

您也可以考虑将类型更改为def :: Double -> Double -> (Double, Double, Double)并将其保留给调用方以处理从IntDouble的转换,尽管这是一个很大程度上依赖于def的含义及其在更大系统中的作用。