10Pines / pdepreludat

BSD 3-Clause "New" or "Revised" License
24 stars 2 forks source link

Pregunta: ¿Por qué se difieren algunos chequeo de tipos? #47

Open asanzo opened 2 years ago

asanzo commented 2 years ago

(No sé si es bug o feature) Esto en GHC pelado tira error en tiempo de compilación:

Prelude> data Cangrejo = Cangrejo {funcion:: Char -> Char} deriving Eq

<interactive>:10:58: error:
    • No instance for (Eq (Char -> Char))
        arising from the first field of ‘Cangrejo’ (type ‘Char -> Char’)
        (maybe you haven't applied a function to enough arguments?)
      Possible fix:
        use a standalone 'deriving instance' declaration,
          so you can specify the instance context yourself
    • When deriving the instance for (Eq Cangrejo)

Pero en PdePreludat recién lo tira en tiempo de ejecución:

*Spec Library Spec> data Cangrejo = Cangrejo {funcion:: Char -> Char} deriving Eq
-- ¡¡¡No tiró error!!!
*Spec Library Spec> Cangrejo id == Cangrejo id

<interactive>:2:1: error:
    • Las funciones no se pueden ordenar ni comparar.
    • In the expression: Cangrejo id == Cangrejo id
      In an equation for ‘it’: it = Cangrejo id == Cangrejo id
asanzo commented 2 years ago

¿Quizás tiene que ver con el Instance TypeError que hacen acá?

JuanFdS commented 2 years ago

Sí, seguramente es por eso! :(, o sea, hay una instancia de Ord y Eq para las funciones, solo que levanta un error de tipos la instancia.

Pregunta, si tratas de definir una función que compare dos cangrejos te deja o te tira un error de compilación?

asanzo commented 2 years ago

Esto anda:

image

Y esto también: image

Pregunta: ¿Qué es el operador =>?

JuanFdS commented 2 years ago

Hay un operador =>? 🤔 , donde aparece?

Y ahh, igual lo que decia era: -hacer el deriving de Eq -escribir una función asi:

cangrejosamenteIguales :: Cangrejo -> Cangrejo -> Bool
cangrejosamenteIguales unCangrejo otroCangrejo = unCangrejo == otroCangrejo 

Eso falla en compilación o ejecución?

ludat commented 2 years ago

pregunta: no sera un tema de ghci? (se que ghci hace cosas medio raras con las instancias y algunos bindings).

Lo probaste tirandolo a un archivo y compilando el archivo?