Haskell,可能的缩进错误,我无法摆脱

时间:2010-12-01 12:11:16

标签: haskell indentation

我遇到了问题,无法找出它是什么。我一遍又一遍地重新缩进,但找不到解决方案。还有其他可以依赖的东西吗?

代码:

type Triple = (Prime, Quot, Gen)

correctness :: Triple -> Bool
correctness (p,q,g) = prime && pLength && qLength && divisor && orderq
           where prime   = probablyPrime n 5
                 qLength = q < 2^1024
                 pLength = p < 2^160
                 divisor = (p-1 `mod` q) == 0
                 orderq  = (g^q mod p == 1) && (g > 1)

错误消息(第94行对应于“correctness :: Triple - &gt; Bool”):

crypt.hs:94:0: parse error (possibly incorrect indentation)
编辑:我解决了这个问题。问题是上述函数中的语法错误。我有otherwise m_ify m*2而不是otherwise = m_ify m*2

3 个答案:

答案 0 :(得分:1)

Worksforme,直接跳转到类型错误。

第92行是

type Triple = (Prime, Quot, Gen)

行,还是你从其他地方移动了?有时,错误可能会显示行号,而不是实际发生的位置。我会检查第92行(可能在附近)上方不匹配的括号。

在某些情况下,一个看不见的unicode角色似乎潜入我的代码。重新打字偶尔会奏效。

答案 1 :(得分:1)

您可能只需要在最后一行的mod周围添加反引号。这不会导致您报告的缩进错误,但以下内容为我编译:

n = undefined
probablyPrime = undefined
type Prime = Int
type Quot = Int
type Gen = Int

type Triple = (Prime, Quot, Gen)

correctness :: Triple -> Bool
correctness (p,q,g) = prime && pLength && qLength && divisor && orderq
           where prime   = probablyPrime n 5
                 qLength = q < 2^1024
                 pLength = p < 2^160
                 divisor = (p-1 `mod` q) == 0
                 orderq  = (g^q `mod` p == 1) && (g > 1)

这里唯一的变化(除了前五行)是在最后一行。

答案 2 :(得分:0)

尝试:

type Triple = (Prime, Quot, Gen)

correctness :: Triple -> Bool
correctness (p,q,g) = prime && pLength && qLength && divisor && orderq
           where 
              prime   = probablyPrime n 5
              qLength = q < 2^1024
              pLength = p < 2^160
              divisor = (p-1 `mod` q) == 0
              orderq  = (g^q mod p == 1) && (g > 1)

阅读 - http://www.haskell.org/onlinereport/syntax-iso.html - 9.3布局