存在型を使うという手もあるけれど、標準に準拠する書き方では、
data (Show a) => F a = F a
みたいに型パラメータとして渡す。

この場合、 F Int と F Char は違う型になってしまうとかいうことがあり、
混同させたいときには問題だが(なので非標準な forall が導入されたのだが)、
たいていは問題ない。はず。

もちろん、宣言の方で
data F a = F a
のように書いておき、 F を使う関数の方で a に対するコンテキストを与える
という手もある。