On Wednesday, 2002-09-18, 07:22, CEST, Hal Daume III wrote: > I think this is purely a personal taste kind of thing. First off, though, > only 'where', 'let', 'of' and 'do' induce layout. I've seen many layout > styles; the most common seem to be: > > let x = ... > y = ... > z = ... > in e > > which is probably a carryover from ML like languages where you might have > to say > > let x = ... > let y = ... > let z = ... > in e > > sometimes "e" doesn't have two spaces before it and sometimes the "in" is > indented an extra space. > > it also seems to be fairly common to put the "in" on the end of the last > line in the local definitions. > > 'where' seems to be less variable. by far the most common of what i've > seen in: > > where x = ... > y = ... > > but i've also seen > > where > x = ... > y = ... > > the advantage here is that its very easy to remove the 'x' definition > without having to reorder other things. > > there seem to be two things people do with 'do'. the first is obvious: > > do x ... > y ... > z ... > > but another common one (esp in the ghc code) is: > > myfunction = do > x ... > y ... > z ... > > which i've recently become fond of. > > with case/of, the most common seems to be: > > case x of > y -> ... > abc -> ... > > but the indentations vary by user. > > if/then/else seems to be highly variable. i personally like > > if foo > then bar > else baz > > but opinions are likely to vary widely. > > likely, |{different offered layout options}| >= |{people who respond to > this email}|, though, so take anything with a grain of sand. > > - hal > > -- > Hal Daume III > > "Computer science is no more about computers | [EMAIL PROTECTED] > than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume > > On 18 Sep 2002, Dr Mark H Phillips wrote: > > > On Wed, 2002-09-18 at 01:26, Hamilton Richards wrote: > > > You can get the effect you're after by using let-expressions: > > > > > > > functn :: Int -> Int > > > > functn i > > > > | i>5 = let t = functn (i-2) in t * i > > > > | i>0 = let t = functn (i-1) in t * i > > > > | otherwise = 1 > > > > > > 'where' is part of the syntax of definitions, not expressions. This > > > enables a name defined in a where-clause to be used in more than one > > > guarded expression. > > > > Thanks for this! It would seem "let ... in ..." is what I want. > > > > But I'm a bit confused about how to use the off-side rule in > > conjunction with let. Do I do: > > > > let a=1 > > b=2 > > c=3 > > in a*b*c > > > > or do I do: > > > > let > > a=1 > > b=2 > > c=3 > > in > > a*b*c > > > > or, in the context of a guard, do I do: > > > > | i>5 = let a=1; b=2; c=3 > > in a*b*c > > > > Basically I'm a bit confused about how the offside rule > > works in various situations. > > > > With "if ... then ... else ..." I don't know whether I should be doing > > > > f x = if x>5 > > then x*x > > else 2*x > > > > or > > > > f x = if x>5 > > then x*x > > else 2*x > > > > or > > > > f x = if x>5 > > then x*x > > else 2*x > > > > or what! > > > > Hugs seems to think they are all legal. Is there any rational as to > > how to do layout? Any tips would be greatly appreciated! > > > > Thanks, > > > > Mark.
Hi, I prefer the following styles: for let statements: let variable1 :: type1 variable1 = expression1 variable2 :: type2 variable2 = expression2 in expression for where clauses: where variable1 :: type1 variable1 = expression1 variable2 :: type2 variable1 = expression2 for do statements: do variable1 <- expression1 variable2 <- expression2 expression for case statements: case expression of pattern1 -> expression1 pattern2 -> expression2 or, if lines would get too long, case expression of pattern1 -> expression1 pattern2 -> expression2 for if statements: if expression then texpression else eexpression Wolfgang _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell