Effective Haskell: Chapter 4 - Peano numbers (page 136)

toPeano :: Int → Peano, does not handle negative Int arguments satisfactorily, setting up an infinite loop.

fromPeano :: Peano → Int is ok.

The author doesn’t discuss this, but shouldn’t Peano numbers be converted to/from Word instead. At least then a negative input for toPeano would cause a type error and not just cycle endlessly.