Type signature for function with possibly polymorphic arguments : <p>Can I, and if so, how do I, write the type signature for a function:</p>

<pre><code>g f x y = (f x, f y)
</code></pre>

<p>Such that given:</p>

<pre><code>f1 :: a -&gt; [a]
f1 x = [x]

x1 :: Int
x1 = 42

c1 :: Char
c1 = 'c'

f2 :: Int -&gt; Int
f2 x = 3 * x

x2 :: Int
x2 = 5
</code></pre>

<p>Such that:</p>

<pre><code>g f1 x1 c1 == ([42], ['c']) :: ([Int], [Char])
g f2 x1 x2 == (126, 15) :: (Int, Int)
</code></pre>
