practico 3 ejercicio 4

practico 3 ejercicio 4

de Julio Carlos Vera Serafino -
Número de respuestas: 5

Hola,

Algunas preguntas sobre el ejercicio, y sobre temas relacionados. Agradezco cualquier comentario.

1) al decir deriving Functor: implica que hay una definiciones por defecto de las funciones características (en este caso fmap)?

2) hay algún comando de ghci equivalente a :t o :k pero para clases? Con este comando el usuario podría saber todas las clases en que cierto tipo tiene instancia.

3)   hay algún comando de ghci equivalente a :t o :k pero para funciones características? Con este comando el usuario podría saber cuáles son las funciones características de una clase, y sus definiciones por defecto?


En respuesta a Julio Carlos Vera Serafino

Re: practico 3 ejercicio 4

de Marcos Viera - InCo -

1) al hacer 'deriving Functor' se obtiene automáticamente la instancia de la clase Functor (como se hace con Show, Read, Eq, etc.). Esto quiere decir que las implementaciones de los métodos se pueden derivar de la estructura del tipo, por eso existe la posibilidad de derivar instancias automáticas. 

2) con :info (o su abreviación :i) podés ver la declaración de la clase y las instancias a las que tenés acceso en ese momento.

3) con funciones características te referís a los métodos? si es así es la misma respuesta del punto 2. También agrego que está la documentación online de las bibliotecas, que es más detallada que la información que podés obtener en ghc. Para buscar podés usar hoogle (https://hoogle.haskell.org/)


saludos

En respuesta a Marcos Viera - InCo

Re: practico 3 ejercicio 4

de Julio Carlos Vera Serafino -
Perfecto, Marcos.

En el punto 1, yo creía Functor no tenía métodos definidos por defecto. Ahora, usando :i, veo que sí los tiene.

Me vinieron bárbaro las explicaciones. Muchas gracias. 

On Friday, December 4, 2020, 6:20:19 PM GMT-3, Marcos Viera - InCo (vía FING) <noreply@fing.edu.uy> wrote:


Imagen de Marcos Viera - InCo
Re: practico 3 ejercicio 4
de Marcos Viera - InCo - viernes, 4 de diciembre de 2020, 17:48
 

1) al hacer 'deriving Functor' se obtiene automáticamente la instancia de la clase Functor (como se hace con Show, Read, Eq, etc.). Esto quiere decir que las implementaciones de los métodos se pueden derivar de la estructura del tipo, por eso existe la posibilidad de derivar instancias automáticas. 

2) con :info (o su abreviación :i) podés ver la declaración de la clase y las instancias a las que tenés acceso en ese momento.

3) con funciones características te referís a los métodos? si es así es la misma respuesta del punto 2. También agrego que está la documentación online de las bibliotecas, que es más detallada que la información que podés obtener en ghc. Para buscar podés usar hoogle (https://hoogle.haskell.org/)


saludos

En respuesta a Julio Carlos Vera Serafino

Re: practico 3 ejercicio 4

de Julio Carlos Vera Serafino -

Parece que me apresuré!

si hago :i Functor obtengo

class Functor (f :: * -> *) where

  fmap :: (a -> b) -> f a -> f b

  (<$) :: a -> f b -> f a

   -- Defined in ‘GHC.Base’

instance Functor (Either a) -- Defined in ‘Data.Either’

instance Functor [] -- Defined in ‘GHC.Base’

instance Functor Maybe -- Defined in ‘GHC.Base’

instance Functor IO -- Defined in ‘GHC.Base’

instance Functor ((->) r) -- Defined in ‘GHC.Base’

instance Functor ((,) a) -- Defined in ‘GHC.Base’

Lo que dice en la primera parte (antes de -- Defined in ‘GHC.Base’) es lo que buscaba yo, creo. Pero parece que no ofrece una implementación de los métodos. Simplemente da su firma. El deriving Functor funcionaría? Mi duda está en que tal vez no tendría nada que derivar.

Acá está el resultado de mi intento de probarlo en ghci

Prelude> :{

Prelude| data Failing e a = Success a | Failure e

Prelude|    deriving (Functor, Show)

Prelude| :}


<interactive>:49:14:

    Can't make a derived instance of ‘Functor (Failing e)’:

      You need DeriveFunctor to derive an instance for this class

    In the data declaration for ‘Failing’



En respuesta a Julio Carlos Vera Serafino

Re: practico 3 ejercicio 4

de Marcos Viera - InCo -

Hola, el error te lo da porque tenés que habilitar la extensión DeriveFunctor para que GHC derive la instancia.


saludos

En respuesta a Marcos Viera - InCo

Re: practico 3 ejercicio 4

de Marcos Viera - InCo -

Igual, por las dudas, quería dejar claro que eso no tiene mucho que ver con el ejercicio en sí mismo.

Para resolver el ejercicio hay que hacer la prueba inductiva de la propiedad que se pide, con la implementación dada.


saludos