---------------------------
-- f and g are mutually recursive
-- Even though f has a totally monomorphic
-- signature, g has a very polymorphic one

f :: Y Maybe -> Int
f (Y x) = g maybeToInt x
f :: Y Maybe -> Int
f (Y x) = g maybeToInt x
f (Y x) = g maybeToInt x