Haskell中的缩进错误

时间:2015-10-11 10:41:12

标签: haskell

我是功能编程的新手,所以如果有人能告诉我哪里错了,请写一个名为add.hs的文件我写道:

ha :: (Bool,Bool) -> (Bool,Bool)
ha (n,m) = ((n && m),((n || m) && not(n && m))) 


fa :: (Bool,Bool,Bool) -> (Bool,Bool)
fa (a,b,r) = (c,s) where
(y,x) = ha(a,b)
(z,s) = ha(x,r)
c =(y||z)

(我知道可能有比Bool更合适的类型,但我只想测试它)

这是我加载文件时得到的: outupt

1 个答案:

答案 0 :(得分:3)

这只是格式化和缩进:

ha :: (Bool, Bool) -> (Bool, Bool)
ha (n, m) = (n && m, (n || m) && not (n && m)) 


fa :: (Bool, Bool, Bool) -> (Bool, Bool)
fa (a,b,r) = (c,s)
  where
    (y,x) = ha (a, b)
    (z,s) = ha (x, r)
    c     =  y || z 

除了我删除的无意义括号之外,您需要缩进where子句,而不是写where的列。这被称为越位规则,并在this answer中进行了解释。

另一方面,你并没有写出惯用的Haskell。我们通常会这样写ha

ha :: Bool -> Bool -> (Bool, Bool)
ha n m = (n && m, (n || m) && not (n && m))

并且fa喜欢这样:

fa :: Bool -> Bool -> Bool -> (Bool, Bool)
fa a b r = (c, s)
  where
    (y,x) = ha a b
    (z,s) = ha x r
    c     =  y || z