{-# LANGUAGE LinearTypes #-} {-# LANGUAGE TupleSections #-} module LinearConstructors where data T a b = MkT a b f1 :: a %1 -> b %1 -> T a b f1 = MkT f2 :: a %1 -> b -> T a b f2 = MkT f3 :: a -> b %1 -> T a b f3 = MkT f4 :: a -> b -> T a b f4 = MkT -- tuple sections g1 :: a %1 -> b %1 -> (a, b, Int) g1 = (,,0) g2 :: a %1 -> b -> (a, b, Int) g2 = (,,0) g3 :: a -> b %1 -> (a, b, Int) g3 = (,,0) g4 :: a -> b -> (a, b, Int) g4 = (,,0)