[Haskell-beginners] Where clause indentation

Brody Berg brodyberg at gmail.com
Fri Oct 20 01:00:10 UTC 2017


I believe this is all covered starting on page 40 of the latest edition
with examples just like Rebecca has shared.

On Thu, Oct 19, 2017 at 17:35 Rebecca Li <rebecca.li at kittyhawk.aero> wrote:

> I believe for where (as well as with let, or any other special phrasing),
> if you're putting something on the same line with it, the subsequent lines
> have to begin after the end of the indentation of the word "where" or
> "let".
>
> A version I got ghc to accept:
>
> 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)
>
> A similar example with let would be the following, where b lines up with a
> let a = blah
>      b = blah'
>
> but this would not work since b is only one level indented, not matching
> a.
> let a = blah
>  b = blah
>
> Hopefully the formatting goes through email..
>
>
>
> On Thu, Oct 19, 2017 at 5:13 PM, Wink Saville <wink at saville.com> wrote:
>
>> 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
>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>
>>
>
>
> --
> Rebecca Li
> rebecca.li at kittyhawk.aero
> 617-899-2036
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20171020/5e153041/attachment-0001.html>


More information about the Beginners mailing list