mirror of
https://github.com/neohaskell/NeoHaskell.git
synced 2024-08-16 18:30:31 +03:00
20 lines
1.8 KiB
Markdown
20 lines
1.8 KiB
Markdown
|
# NeoHaskell Code Style
|
||
|
|
||
|
Code written in this codebase must follow the NeoHaskell code style.
|
||
|
|
||
|
The NeoHaskell code style is as follows:
|
||
|
|
||
|
- Don't include it into the file, but `NoImplicitPrelude` is enabled, take that into account.
|
||
|
- Primitive types like`Int`, `Double`, `Char`, `Bool`, etc. are imported from their own NeoHaskell modules, which are named as the type itself. Not `Data.*`.
|
||
|
- When importing collections, you will import them from the NeoHaskell module too, e.g. `Vector` instead of `Data.Vector` and `Maybe` instead of `Data.Maybe`.
|
||
|
- Type parameters in functions will be **always** defined in a `forall` clause.
|
||
|
- Type parameters will always be named as their intent, and not with short letters. For example, instead of `Array a`, one will write `Array value`.
|
||
|
- Modules won't be imported unqualified unless it is for types or classes.
|
||
|
- Modules will always be imported qualified to use functions from them.
|
||
|
- Modules will be always imported qualified with a meaningful name. For example, `Data.Text` will be imported as `Text` and never as `T`. `GHC.Prim` will be imported as `Prim` and not as `P`.
|
||
|
- Code **WILL NEVER** be written as point-free style, and instead it will always be typed as explicit function application.
|
||
|
- The operators `$` and `.` make an unnatural switch of reading order, the `&` is **ALWAYS** used instead of those.
|
||
|
- Modules from `base` will always be imported with a `Ghc` prefix in their qualification, in order to explicitly set boundaries.
|
||
|
- Functions will always have doc comments as explained in [the documentation.md file](./documentation.md).
|
||
|
- When relying on complex math or syntactic concepts of Haskell which could make some junior TypeScript dev not understand the code, a comment will be left in order to improve that. E.g. `-- TODO: Figure out a way of improve this API`.
|