class X a where { x :: a }
instance X String where { x = "hello" }
f :: X a => (a, a)
f = (x, x)
main = print (f :: (String, String))
превратиться условно в
data X a = X { x :: a }
xString :: X String
xString = X { x = "hello" }
f :: X a -> (a, a)
f xI = (x xI, x xI)
main =
print
(showTuple showString showString)
(f xString :: (String, String))