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".
 | 
