異なる型を同一のリストに入れる方法を探しています

例えば
foo :: Int -> Int -> Int
bar :: Int -> Int
とした時、この二つの関数を同じリストに入れるというわけです
そのままリストに入れても弾かれるので両者を包むような型を作ろうと思いました

data Func = F (Int -> Int -> Int) | B (Int -> Int)

というデータ型を定義すれば
[F foo, B bar]
というリストが一応できます
しかしその中身は取り出せません
test (F f) = f
test (B b) = b
このような関数は定義できません、考えれば当然のことですが

一つのリストに入れ、その中身を取り出すような方法はないでしょうか?