Я играл со стилистами и делал это:
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) имеет этот тип, однако я не знаю, как реализовать Initialable for ((,) * a ) где * - связанная переменная. В моей интерпретации я пытаюсь сделать эквивалент:
instance Firstable (flip (,) a) where ...
Есть ли способ сделать это в Haskell? Предпочтительно без расширений?
Спасибо!