cartesianProduct xs ys = fromList $ liftA2 (,) (toList xs) (toList ys)
cartesianProduct (fromList [1,2]) (fromList ['a','b']) = fromList [(1,'a'), (1,'b'), (2,'a'), (2,'b')]