How to enumerate a recursive datatype in Haskell?
问题 This blog post has an interesting explanation of how to use the Omega monad to enumerate an arbitrary grammar diagonally. He offers an example of how to do so, resulting in an infinite sequence of strings. I'd like to do the same, except that, instead of generating a list of strings, it generates a list of an actual datatype. For example, data T = A | B T | C T T Would generate A, B A, C A A, C (B A) A... Or something similar. Unfortunately my Haskell skills are still maturing and after some