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.