私は型クラスをいじっていて、これを作りました:
class Firstable f where
  fst :: f a -> a
class Secondable f where
  snd :: f a -> a
次に、の実装を追加しようとしたところ、次の(,)ことができることに気付きました。
instance Secondable ((,) a) where
  snd (x,y) = y
私はこれがうまくいくと確信しています。なぜなら、その型を持っSecondableている種類(* -> *)が必要だからです。しかし、バインドされた変数がどこにあるのかを実装する((,) a)方法がわかりません。Firstable((,) * a)*
instance Firstable (flip (,) a) where ...
Haskellでこれを行う方法はありますか? できれば拡張子なしですか?