Refactorings: using lamdas instead of anonymous classes
Refactoring Option type: replacing anonymous classes with lambda
Refactoring Semigroup
Refactoring List type
Refactoring Ord and Show
Refactoring `Functiona` and `Hash`
Refactoring `Equal`
Refactoring `Class` and `Bottom`
Refactoring `Shrink` and `Variant`