sintaxis restricciones pattern opciones multiples hacer funciones ejemplos declaracion data como basica haskell pointfree

pattern - restricciones multiples haskell



¿Cuál es la derivación que muestra / x->(x, x) de Haskell equivalente a join(,)? (2)

Me gusta Aadits la respuesta intuitiva. Así es como lo averiguaría leyendo el código fuente.

  1. Voy a Hoogle
  2. Busco join
  3. Hago clic en join
  4. Hago clic en el botón "fuente" para acceder al código fuente para join
  5. Veo que join x = x >>= id
  6. Así que sé que join (,) = (,) >>= id
  7. Busco >>= en Hoogle y hago clic en el enlace
  8. Veo que es parte de la clase de tipos de mónada y sé que estoy tratando con (,) que es una función, por lo que hago clic en "fuente" en la instancia de Monad ((->) r)
  9. Veo que f >>= k = /r -> k (fr) r
  10. Como tenemos f = (,) y k = id , obtenemos /r -> id ((,) r) r
  11. Sooo ... nueva función! id Lo busco en Hoogle y hago clic en su código fuente.
  12. Resulta id x = x
  13. Así que en lugar de join (,) ahora tenemos /r -> ((,) r) r
  14. Que es lo mismo que /r -> (,) rr
  15. Que es lo mismo que /r -> (r,r)

Nunca olvide que los Haddocks se enlazan al código fuente de la biblioteca. Eso es muy útil cuando se trata de averiguar cómo funcionan las cosas juntas.

Según pointfree :

/x -> (x, x)

es equivalente a:

join (,)

¿Cuál es la derivación que muestra esto?


Mira las firmas de tipo:

/x -> (x, x) :: a -> (a, a) (,) :: a -> b -> (a, b) join :: Monad m => m (m a) -> m a

Cabe señalar que ((->) r) es una instancia de la clase de tipos Monad. Por lo tanto, en la especialización:

join :: (r -> r -> a) -> (r -> a)

Lo que hace la join para las funciones es aplicar la función dada dos veces al mismo argumento:

join f x = f x x -- or join f = /x -> f x x

De esto, podemos ver trivialmente:

join (,) = /x -> (,) x x -- or join (,) = /x -> (x, x)

Qed.