[Haskell-cafe] Re: Is 78 characters still a good option? Was:
breaking too long lines
Christian Maeder
Christian.Maeder at dfki.de
Mon Apr 27 10:15:49 EDT 2009
Richard O'Keefe wrote:
>
> On 25 Apr 2009, at 8:59 pm, Miguel Mitrofanov wrote:
>
>> Something like
>>
>> newtype MyCoolMonad = MyCoolMonad (FirstTransformer (SecondTransformer
>> (ThirdTransformer Whatever))) deriving (Functor, Monad, FirstClass,
>> SecondClass, ThirdClass, SomeOtherClass)
[...]
> For what it's worth, my personal Haskell style lines up
>
> data T
> = C1 ...
> | ...
> | Cn ...
> deriving (...)
This has the clear advantage that indentation does not depend on the
length of the type name as in the quite typical layout of Xiao-Yong Jin:
http://www.haskell.org/pipermail/haskell-cafe/2009-April/060541.html
> so I'd have this as
>
> newtype MyCoolMonad
> = MyCoolMonad (FirstTransformer (SecondTransformer
> (ThirdTransformer Whatever)))
> deriving (Functor, Monad, FirstClass, SecondClass, ThirdClass,
> SomeOtherClass)
>
> where the longest line is 86 columns.
(which is still too long as my reply-wrap proofs.)
[...]
However, indenting by 3 or 6 characters depending on "data" or "newtype"
is also a bit arbitrary. Consider:
newtype MyCoolMonad =
MyCoolMonad
(FirstTransformer
(SecondTransformer (ThirdTransformer Whatever)))
deriving
( Functor, Monad, FirstClass, SecondClass, ThirdClass
, SomeOtherClass)
Either all alternatives fit on one line or they go on separate lines
each. The same should apply to all components of one alternative.
Additionally, as above, a long type-application may need to be broken
over several lines. (Breaking before "=" and having "=" above "|" looks
also nice.)
Pretty-printing a comma-separated list (following deriving) is an extra
subject with a couple of variations:
Putting commas in the front, better indicates the continuation, but the
extra space following the open bracket "(" looks a bit odd. (Surely one
could also leave a space before the closing bracket, although I wouldn't
like spaces around all brackets.)
The alternative:
(Functor, Monad, FirstClass, SecondClass, ThirdClass,
SomeOtherClass)
has the disadvantage, that the second line is only indented by one
character (relative to the previous one), but intending further (+1 or
+3 or even one less) is an alternative.
(I'm no friend of putting the closing bracket on a separate line in the
same column as the opening one. Too easily such indentations are messed
up.)
Cheers Christian
More information about the Haskell-Cafe
mailing list