I think that's an excellent idea. I had the idea of later on making a bit of a DSL for declaring the rules which would make them appear cleaner, but they probably wouldn't be any nicer under the hood. Making them functions would make them nicer under the hood and clean up the declarations some.

One thing that will be needed is a way to call all the rules, but the order doesn't matter. I was going to do some metaprogramming to get all the classes in the SyllableRules module and call evaluate on them. How would you go about it if each rule is declared as a function?