1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
{-# LANGUAGE TypeFamilies #-} module Simple11 where type family F a same :: a -> a -> a same = undefined mkf :: a -> F a mkf p = undefined -- Works with explicit signature -- foo :: a -> a -> (F a, a) foo p q = same (mkf p, p) (mkf q, q)