Grałem około z typeclasses i uczynił to:Haskell Typeclass za krotki
class Firstable f where
fst :: f a -> a
class Secondable f where
snd :: f a -> a
Następnie próbowałem dodać implementację (,) i zrozumiałem, że mogę zrobić:
instance Secondable ((,) a) where
snd (x,y) = y
I jestem całkiem pewny, że to działa, ponieważ Secondable powinien mieć rodzaj (* -> *) gdzie ((,) a) ma ten typ, jednak nie wiem jak zastosować Firstable for ((,) * a) where * is zmienna związana, W mojej interpretacji próbuję wykonać równoważnik:
instance Firstable (flip (,) a) where ...
Czy istnieje sposób, aby to zrobić w Haskell? Najlepiej bez rozszerzeń?
Dzięki!
AFAIK, nr: należałoby 'TypeSynonymInstances', ale Synonimy typu nie mogą być częściowo oceniany. Ale czy znasz alternatywę dla 'MultiParamTypeClasses'? To może trochę brzydka, ale działa. – leftaroundabout
Możesz być zainteresowany tym, jak wygląda pakiet krotek: http://hackage.haskell.org/package/tuple –
@JohnL naprawdę fajne, dzięki! –