You can map the existing values to a new 3-tuple, so:
info2 = (i1, i2, 3.17) where (i1, i2) = info
The ++ operator I'd use to do this with a List doesn't seem to be implemented for tuples...
Indeed, (++) :: [a] -> [a] -> [a] takes two lists and returns a list that is the concatenation of the two given lists. This also means that the items in the list all have the same type, and that the items in the two lists have the same type.
One could make a typeclass to concatenate tuples with an arbitrary length, for example with:
{-# LANGUAGE FlexibleInstances, FunctionalDependencies, MultiParamTypeClasses #-}
class TupleAppend a b c | a b -> c where
(+++) :: a -> b -> c
instance TupleAppend (a, b) (c, d) (a, b, c, d) where
(a, b) +++ (c, d) = (a, b, c, d)
instance TupleAppend (a, b) (c, d, e) (a, b, c, d, e) where
(a, b) +++ (c, d, e) = (a, b, c, d, e)
-- …
instance TupleAppend (a, b, c) (d, e) (a, b, c, d, e) where
(a, b, c) +++ (d, e) = (a, b, c, d, e)
instance TupleAppend (a, b, c) (d, e, f) (a, b, c, d, e, f) where
(a, b, c) +++ (d, e, f) = (a, b, c, d, e, f)
-- …
But this will not help here either since you here add one element to the tuple, not concatenate two tuples. You can create an extra typeclass to append a single item:
{-# LANGUAGE FlexibleInstances, FunctionalDependencies, MultiParamTypeClasses #-}
class TupleAddL a b c | a b -> c where
(<++) :: a -> b -> c
class TupleAddR a b c | a b -> c where
(++>) :: a -> b -> c
instance TupleAddL a (b, c) (a, b, c) where
a <++ (b, c) = (a, b, c)
instance TupleAddR (a, b) c (a, b, c) where
(a, b) ++> c = (a, b, c)
instance TupleAddL a (b, c, d) (a, b, c, d) where
a <++ (b, c, d) = (a, b, c, d)
instance TupleAddR (a, b, c) d (a, b, c, d) where
(a, b, c) ++> d = (a, b, c, d)
-- …
Then you thus can use (13, "Arrabella") ++> 3.17 to create a 3-tuple.