решений много:
1. если длина списка и порядок типов известны, то это кортежи. Можно взять любую либу с анонимными произведениями полиморфными, будет что-то вроде
x :: HList [Int, String]
x = 1 ::: "2" ::: Nil
2. если известны типы, но длина неизвестна, то проще всего сумму
data X = XInt Int | XBool Bool
x :: [X]
x = [XInt 1, XBool True]
или взять опять же либу с анонимными суммами
x :: [Union [Int, Bool]]
x = [inj 1, inj True]
3. если типы неизвестны, но известно свойство, и нужно только это свойство, то
class Property a where ...
data SomeProperty = forall a. Property a => SomePropery a
x :: [SomeProperty]
например с show+num
data SomeX = forall a. (Show a, Num a) => SomeX a
x :: [SomeX]
x = [SomeX (1 :: Int), SomeX (2 :: Double)]
-- но использовать можно только известные свойства, например как тут - * и show, больше ничего про значение неизвестно
f :: [String]
f = map (\(SomeX x) -> show (x * 2)) xs