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