tipos sirve residuo que para operadores logicos funcion ejemplos comandos aritmeticos haskell function-composition arrows category-theory

haskell - sirve - Control.Categoría, ¿qué significa>>> y<<<?



que es haskell pdf (1)

Como Hackage y / o Hoogle te dirán,

(>>>) :: Category k => a`k`b -> b`k`c -> a`k`c (<<<) :: Category k => b`k`c -> a`k`b -> a`k`c

Observe que este último es en realidad el mismo que

(.) :: Category k => b`k`c -> a`k`b -> a`k`c

o, en su forma Prelude , especializada en la categoría de funciones Hask ,

(.) :: (b->c) -> (a->b) -> (a->c)

Entonces, <<< y >>> simplemente componen funciones, o más generalmente morfismos / flechas.

<<< compone en la misma dirección que la familiar . , mientras >>> cambia los argumentos para que "los datos fluyan de izquierda a derecha".

Ahora, lo que significa la composición de la flecha, para categorías distintas de Hask , depende, por supuesto, de la categoría. Kleisli IO es un ejemplo fácil de entender: digamos que tenemos una función pura

pipe :: Double -> String pipe = show . sqrt . (+2) . abs

Como dije, esto también puede ser escrito.

pipe = abs >>> (+2) >>> sqrt >>> show

Ahora, si desea agregar un registro de E / S primitivo (como lo haría en un lenguaje imperativo), puede introducir

type (-|>) = Kleisli IO abs'', add2'', sqrt'' :: Num a => a -|> a show'' :: Show a => a -|> String abs'' = Kleisli $ /x -> do putStrLn ("Absolute of "++show x++"...") return $ abs x add2'' = Kleisli $ /x -> do putStrLn ("Add 2 to "++show x++"...") return $ x + 2 sqrt'' = Kleisli $ /x -> do putStrLn ("Square root of "++show x++"...") return $ sqrt x show'' = Kleisli $ /x -> do putStrLn ("Show "++show x++"...") return $ show x

Con eso, puedes definir

pipe'' :: Double -|> String

exactamente de la misma manera que antes, es decir

pipe'' = abs'' >>> add2'' >>> sqrt'' >>> show''

Pero ahora obtendrá los resultados intermedios impresos como un efecto secundario.

Estoy siguiendo este blog , para escribir un servidor http simple en haskell,

El uso de >>> no está claro para mí. ¿Qué hace este fragmento de código?

handleHttpConnection r c = runKleisli (receiveRequest >>> handleRequest r >>> handleResponse) c >> close c

Similarmente en este enlace , estoy viendo <<<

let h = arr (++ "!") <<< arr foo <<< Kleisli bar <<< arr id

¿Qué hace <<< y >>> hacer? ( El documento de Hackage es muy conciso y no se puede sacar mucho de él).