On 29 May 2012 14:35, rickmurphy <rick at rickmurphy.org> wrote: > w' :: Num (I a) => O I a > w' = (OC (IC 0)) >>= return . id w' requires a Num instance for 'I a', but there is none. You need to define: instance Num a => Num (I a) where ... by lifting all operations into I.