Necesito ayuda para entender este tipo de firma que es del paquete Thrist.Comprensión de una firma de tipo complicado
import Prelude hiding ((.), id)
import Control.Category
import Data.Monoid
import Control.Arrow
import Control.Monad
foldlThirst :: (forall j k . (a +> j) -> (j ~> k) -> (a +> k))
-> (a +> b)
-> Thrist (~>) b c
-> (a +> c)
Estoy confundido acerca de varias cosas.
Primero, ¿cuáles son los símbolos +> y ~>? ¿Dónde están documentados y cómo se llaman?
Pero mi confusión se detiene allí. Me doy cuenta de que la cuantificación está describiendo el enhebrado de tipos de Thrist, pero no estoy seguro de si está describiendo una relación válida para el primer argumento, o toda la función, o quién sabe ...
En otros casos donde He visto la cuantificación existencial, la frase termina con un punto, pero aquí termina con ->, ¿es eso significativo?
Creo que lo tengo. El resto de la firma tipo que inició sería: (f a b) -> Thrist g b c -> (f a c). Si es así, me imagino que podrían haber sido fácilmente $>, etc. –
@Jonathan Fischoff: Sí. Los símbolos utilizados son sugestivos, al igual que el uso tradicional de 'm' para una variable de tipo que se espera sea una instancia de' Monad'. –