Haskell Typeclass for Tuples
haskell, typeclass
Solution
A version with worse parametricity guarantees can be had with MPTCS and Fundeps or with TypeFamilies.
type family Fst p
type instance Fst (a,b) = a
type instance Fst (a,b,c) = a
...
class First p where
fst :: p -> Fst p
instance Fst (a,b) where
fst (a,_) = a
instance Fst (a,b,c) where
fst (a,_,_) = a
...
but ultimately, you'll need to use some extensions.
Problem
I was playing around with typeclasses and made this: ``` class Firstable f where fst :: f a -> a class Secondable f where snd :: f a -> a ``` I then tried to add an implementation for `(,)` and realized that I could do: ``` instance Secondable ((,) a) where snd (x,y) = y ``` I'm pretty sure this works because `Secondable` should have kind `(* -> *)` where `((,) a)` has that type, however, I don't know how to implement `Firstable` for `((,) * a)` where `*` is the bound variable, In my interpretation I am trying to do the equivalent of: ``` instance Firstable (flip (,) a) where ... ``` Is there a way to do this in Haskell? Preferably without extensions?