1. Provide a Storable instance for AI.MEP.Types.Gene and make the Chromosome a Data.Vector.Storable. 2. Improve code generation: Perform subexpression elimination, e.g. x0 / x0 should be reduced to 1 1 + 1 should become 2, etc. And possibly, support unary operators: Interpreted expression v1 = x0 / x0 v3 = s x0 v1 v6 = v3 / v1 v14 = s x0 v6 v15 = v14 * v6 result = v1 - v15 should eventually become v1 = sin x0 v2 = v1 * v1 result = 1 - v2 3. Improve the demo: provide a CLI interface to work with external data 4. Performance tuning and benchmarking using Criterion package. Hint: use of matrices featuring O(1) memory access instead of lists of vectors ([Chromosome a], [Phenotype a]), might improve the speed of such operators as binaryTournament. 5. Implement subpopulations that eventually exchange individuals