2010-02-27 19 views
8

estaba leyendo el Guestbook example para Happstack y vi el símbolo >> la que no vi antes en los libros de texto que he estudiado para aprender Haskell (por ejemplo, véase la línea 23). ¿Qué es?¿Qué significa el símbolo >> en Haskell

No pude encontrarlo en Google porque ignora el >> en su totalidad (Bing no lo hace pero sale con toneladas de resultados no relacionados).

+2

Hoogle (y hayoo se menciona más adelante) son la mejor manera de búsqueda usando la sintaxis de haskell http://www.haskell.org/hoogle/?hoogle=%3E%3E – Keith

+0

También hay Google La búsqueda de código generalmente es buena para casos como este, aunque puede no ser la mejor para este caso en particular: http://google.com/codesearch?q=lang%3Ahaskell+%3E%3E&hl=en&btnG=Search+Code – MatrixFrog

Respuesta

10

En el símbolo del sistema ghci, puede escribir:

:info >> 

Y conseguir un resultado como:

class Monad m where 
... 
(>>) :: m a -> m b -> m b 
... 
     -- Defined in GHC.Base 
infixl 1 >> 

A partir de ahí, se puede simplemente dar un vistazo al código fuente para aprender más .

Y sólo por el hecho de responder a su pregunta:

k >> f = k >>= \_ -> f 
+1

Me siento estúpido ahora; Sé sobre el comando: i (info) pero vengo de Java y PHP y aún me estoy acostumbrando a usar REPL para todo. Gracias – CharlesS

+5

Correcto, pero apenas útil para un novato Haskell. ¿Por qué existe? Para que sirve? +0. –

+1

Esto es suficiente para mí para saber dónde buscar; No tenía ninguna pista antes. – CharlesS

14

Hayoo reconoce este tipo de operador: http://holumbus.fh-wedel.de/hayoo/hayoo.html

(>>) es como (>>=), en el que las secuencias de dos acciones, excepto que no tiene en cuenta el resultado de la primera.

+0

Por qué ¿Voto abajo? –

+0

¡Gracias por ese enlace! Muy útil. Upvote. – CharlesS

+1

El duqueout definitivo del campeonato de lucha de puños: ¡Hoogle contra Hayoo! –

1

No soy un experto Haskell, pero >> es un operador que se utiliza para trabajar con las mónadas, que son una característica inusual que (entre muchos otras cosas) habilite la programación de estilo imperativo en Haskell. Hay muchos tutoriales disponibles en mónadas; here's one good one.

Esencialmente, a >> b se puede leer como "qué hacer a continuación ab, y devolver el resultado de b". Es similar al operador de enlace más común >>=.

+6

Responder con "que son cosas difíciles de entender" no aclara. Creo que el lector está dispuesto a fracasar. –

+0

Bastante justo. Ahora son "una característica inusual" en lugar de ser "cosas difíciles de entender". –

+0

¿Es una "característica inusual" llamar a una función y pasar el resultado a otra función? OK ... – jrockway

8

En do-notación

a >> b >> c >> d 

es equivalente a

do a 
    b 
    c 
    d 

(y de manera similar a >>= (b >>= (c >>= d)) es equivalente a

do r1 <- a 
    r2 <- b r1 
    r3 <- c r2 
    d r3