<div dir="ltr">this works:<div><br></div><div><br></div><div><div>{-# LANGUAGE MultiParamTypeClasses,FlexibleInstances #-}</div><div>module Lift where</div><div><br></div><div>newtype MyNumbers a = MyNum a deriving Show</div><div><br></div><div>class Numbers a where</div><div> sqr :: a -> a</div><div><br></div><div>class Lifts b a where</div><div> lift0 :: a -> b a</div><div> lift1 :: (a -> a) -> b a -> b a</div><div><br></div><div>instance Lifts MyNumbers a where</div><div> lift0 x = MyNum x</div><div> lift1 o (MyNum x) = MyNum (o x) </div><div><br></div><div>instance Numbers Float where</div><div>  sqr x = x * x  </div><div><br></div><div>instance Numbers (MyNumbers Float) where</div><div>  sqr x = lift1 sqr x </div><div><br></div>​</div></div>