[Haskell-beginners] Where clause indentation
Wink Saville
wink at saville.com
Fri Oct 20 00:13:43 UTC 2017
I created a file with the dividedBy example from Chapter 8.5 of "Haskell
Programming from first principles" :
dividedBy :: Integral a => a -> a -> (a, a)
dividedBy num denom = go num denom 0
where go n d count
| n < d = (count, n)
| otherwise = go (n - d) d (count + 1)
I get the following error when I load into ghci:
$ ghci chapter8_5-IntegralDivision.hs
GHCi, version 8.2.1: http://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from /home/wink/.ghci
[1 of 1] Compiling Main ( chapter8_5-IntegralDivision.hs,
interpreted )
chapter8_5-IntegralDivision.hs:4:7: error:
parse error (possibly incorrect indentation or mismatched brackets)
|
4 | | n < d = (count, n)
| ^
Failed, 0 modules loaded.
λ>
But if I put the "go" function on its own line:
dividedBy :: Integral a => a -> a -> (a, a)
dividedBy num denom = go num denom 0
where
go n d count
| n < d = (count, n)
| otherwise = go (n - d) d (count + 1)
It does compile:
$ ghci chapter8_5-IntegralDivision.hs
GHCi, version 8.2.1: http://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from /home/wink/.ghci
[1 of 1] Compiling IntegralDivision ( chapter8_5-IntegralDivision.hs,
interpreted )
Ok, 1 module loaded.
Or I can put the "where" on the previous line:
dividedBy :: Integral a => a -> a -> (a, a)
dividedBy num denom = go num denom 0 where
go n d count
| n < d = (count, n)
| otherwise = go (n - d) d (count + 1)
it also compiles:
$ ghci chapter8_5-IntegralDivision.hs
GHCi, version 8.2.1: http://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from /home/wink/.ghci
[1 of 1] Compiling Main ( chapter8_5-IntegralDivision.hs,
interpreted )
Ok, 1 module loaded.
λ>
Can someone shed light on what I've done wrong?
-- Wink
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20171020/10332630/attachment.html>
More information about the Beginners
mailing list