46 lines
1.5 KiB
Plaintext
46 lines
1.5 KiB
Plaintext
* GHC support
|
||
|
||
GHC 7.4, 7.6 and 7.8 are supported at this moment. If GHC 7.10 is
|
||
released, the support for GHC 7.4 will be discontinued.
|
||
|
||
|
||
* Compiler warnings
|
||
|
||
All compiler warnings generated by the latest stable GHC with "-Wall"
|
||
MUST be eliminated.
|
||
|
||
|
||
* Deceleration style
|
||
|
||
Try to use "where" instead of "let".
|
||
|
||
|
||
* Error handling
|
||
|
||
As a general rule of thumb anything that can fail (as in the Monad
|
||
method) should get a surrounding catchError with a description of what
|
||
the function was trying to do. If a function is trying to do more than
|
||
one thing it should probably be split up into multiple seperate
|
||
functions anyways.
|
||
|
||
All uses of the major partial functions (i.e fromJust, fromLeft, head
|
||
etc.) should probably be replaced by pattern matching in the do block
|
||
(since pattern match failures are very easy to handle with
|
||
catchError).
|
||
|
||
We also have to be careful with anything that uses liftIO since that
|
||
might introduce unexpected exceptions. For example parseCabalFile
|
||
still uses IOError's for error reporting which would circumvent ErrorT
|
||
and make handling that error with MonadError impossible. Stuff like
|
||
that should probably be converted to GhcModT or return IO (Either
|
||
String SomeThing) instead. It should be pretty easy to write a
|
||
function to lift IO (Either e a) into a GhcModT a (where e could be
|
||
String, ´GhcModError` or something like that).
|
||
|
||
|
||
* #if
|
||
|
||
"#if __GLASGOW_HASKELL__" should be used in "Gap.hs" and "Monad.hs"
|
||
only. If it is used in another file, it should be moved into
|
||
"Gap.hs".
|