> This whole exercise is my attempt to translate *The Littler MLer* and its last chapter where they go into functors.
I suggest you first go through a Haskell tutorial, and get your knowledge secure of idiomatic Haskell. Even so, I just don't believe you're coming from idiomatic ML. Unless 'The Little MLer' is giving it as obfuscated code, and the objective is to de-obfuscate it.
I'd code your `plus2` with pattern-matching:
> plus2 :: MyNum -> MyNum -> MyNum
> plus2 MNZero m = m
> plus2 (OneMoreThan n') m = OneMoreThan $ plus2 n' m
Your test for `(x == MNZero)` inside helper function `pCessor` is useless: flow-of-control doesn't take the outer `else` branch unless `x` (i.e. `n`) is _not_ equal `MNZero`.
Similar redundant code in the case for `Int`. But that has bigger problems, as Olaf points out: `Int`s can be negative. So if `plus` is called with a negative `n`, it'll call `pCessor` repeatedly until stack overflow (or numeric underflow).
AntC
_______________________________________________