There is a preferred style for writing Curry programs. Following this style make it easier for others to read your programs. Of course, there might be personal preferences but, if there are no good reasons, one should follow this style. Changes of this style should be discussed in the Curry mailing list.
The style guide is available as a separate web page.
There is also some automatic support to check whether a Curry program follows some parts of this style guide. A style checker for Curry is available in the Curry package `stylechecker` which can be installed via the command
cypm update && cypm install stylechecker
This installs the executable curry-stylechecker
into the directory
~/.cpm/bin
(which should be added to your path).
After the successful installation,
the style checker which can be invoked by the command
curry-stylecheck <Curry program>
It should be noted that this tool checks only a small part of the style rules (mainly indentation rules).
For instance, consider the following ugly Curry program:
module Test where fib n | n==0 = 0 | n==1 = 1 | otherwise = fib (n-1) + fib (n-2) fac n = if n==0 then 1 else n * fac (n-1) echo = getChar >>= \c -> if ord c == (-1) then done else putChar c >> echo
Then the Curry style checker produces the following style violations:
> curry-stylecheck Test ... Test: 3:1-5:43: Warning: `type signature` missing Hint: `top level functions` should have `type signatures` ... Test: 3:7-5:43: Warning: `guards` not aligned Hint: align `guards` ... Test: 3:7-5:43: Warning: `guard` equal signs not aligned Hint: align `guard` equal signs ... Test: 7:1-8:26: Warning: `type signature` missing Hint: `top level functions` should have `type signatures` ... Test: 7:9-8:26: Warning: `then` and `else` wrong alignement Hint: align `then` and `else` ... Test: 10:1-10:83: Warning: line too long Hint: line should be under `80` character(s) ... Test: 10:1-10:83: Warning: `type signature` missing Hint: `top level functions` should have `type signatures`