Yo estaba jugando con clases de tipos e hizo esto:Haskell clase de tipos de tuplas
class Firstable f where
fst :: f a -> a
class Secondable f where
snd :: f a -> a
Luego trató de añadir una implementación para (,) y se dio cuenta de que podía hacer:
instance Secondable ((,) a) where
snd (x,y) = y
I Estoy bastante seguro de que esto funciona porque Secondable debería tener kind (* -> *) donde ((,) a) tiene ese tipo, sin embargo, no sé cómo implementar Firstable para ((,) * a) donde * es la variable vinculada, en mi interpretación, estoy tratando de hacer el equivalente de:
instance Firstable (flip (,) a) where ...
¿Hay alguna manera de hacer esto en Haskell? Preferiblemente sin extensiones?
Gracias!
yo sepa, no: lo que se necesita 'TypeSynonymInstances', pero escribir los sinónimos no pueden ser evaluados parcialmente. ¿Pero conoce la alternativa con 'MultiParamTypeClasses'? Eso es quizás un poco feo, pero funciona. – leftaroundabout
Puede que le interese cómo maneja el paquete tuple esto: http://hackage.haskell.org/package/tuple –
@JohnL realmente genial, gracias! –