Quizás estoy haciendo esto de la manera incorrecta, pero estoy usando HXT para leer algunos datos de vértice que me gustaría usar en una matriz en HOpenGL. Las matrices de vértices deben ser una Ptr que se crea llamando a newArray. Desafortunadamente newArray devuelve un IO Ptr, por lo que no estoy seguro de cómo usarlo dentro de una flecha. Creo que necesito algo con una declaración de tipo similar a IO a -> Arrow a?Llamar a una Monad de IO dentro de una Flecha
Respuesta
El tipo IO a -> Arrow a
no tiene sentido; Arrow
es una clase de tipo, no un tipo específico, muy similar a Monad
o Num
. Específicamente, una instancia de Arrow
es un constructor de tipos que toma dos parámetros que describen cosas que se pueden componer como funciones, uniendo tipos de extremo a extremo. Entonces, la conversión de IO a
a una flecha podría llamarse un error de tipo conceptual.
no estoy seguro exactamente lo que estamos tratando de hacer, pero si realmente quieres estar usando IO
operaciones como parte de un Arrow
, necesita la instancia Arrow
incluir eso. La forma más sencilla de eso es observar que las funciones con tipos como a -> m b
para cualquier instancia Monad
se pueden componer de la manera obvia. El paquete hxt
parece proporcionar un tipo más complicado:
newtype IOSLA s a b = IOSLA { runIOSLA :: s -> a -> IO (s, [b]) }
Ésta es una cierta mezcla de los IO
, State
, y []
mónadas, unido a una función que por encima de tal manera que se puede componerlos pasando por los tres Monad
s en cada paso. Realmente no he usado hxt
mucho, pero si estos son los Arrow
s con los que está trabajando, es bastante simple levantar una función arbitraria IO
para que funcione como uno solo, simplemente pase el valor de estado s
sin cambios, y gire la salida de la función en una lista singleton. Puede que ya exista una función para hacer esto por usted, pero no vi ninguna en un breve vistazo.
Básicamente, te gustaría algo como esto:
liftArrIO :: (a -> IO b) -> IOSLA s a b
liftArrIO f = IOSLA $ \s x -> fmap (\y -> (s, [y])) (f x)
- 1. IO dentro de Get Monad
- 2. ¿Por qué Scala no tiene una Monad de IO?
- 3. Haskell IO Monad y uso de memoria
- 4. Traverse_ de Scalaz con IO monad
- 5. ¿Llamar a una función dentro de un método de clase?
- 6. Llamar a un método de clase dentro de una clase
- 7. Ejemplo de una gran pila de Monad
- 8. Cómo realizo IO dentro de una aplicación WAI (Warp)
- 9. Ayúdeme a entender este código de Scala: Scalaz IO Monad e implica
- 10. Llamar a un método dentro de una consulta LINQ
- 11. ¿Llamar a una clase CSS dentro de otra clase?
- 12. Llamar a una macro dentro de otra macro en Twig
- 13. Llamar a un objeto dentro de una función
- 14. Llamar a una función python dentro de un archivo html
- 15. llamar a un método estático dentro de una clase?
- 16. State Monad, ¿por qué no una tupla?
- 17. list monad transformer
- 18. Llamar a una biblioteca desde dentro de una función de ayudantes en Codeigniter
- 19. Llamar a una función jQuery dentro de html return de una llamada AJAX
- 20. Cómo llamar a una función no constante dentro de una función const (C++)
- 21. ¿Por qué no puedo llamar a métodos dentro de una clase que implementa explícitamente una interfaz?
- 22. JavaScript - ¿Cómo puedo llamar a una función dentro de una función?
- 23. ¿Llamar a una función variadic dentro de una función variadic en Javascript?
- 24. C++ - Llamar a una función dentro de una clase con el mismo nombre que la clase
- 25. HowTo: Dibuja una línea con una flecha?
- 26. ¿Es malo llamar vistas dentro de una Vista en sql
- 27. Vim: teclas de flecha para moverse dentro de una línea en el modo de inserción
- 28. crear una flecha con color de degradado
- 29. Llamar a una función solo una vez
- 30. Haskell mónada: IO [doble] a [IO Doble]
[ 'arrIO'] (http://hackage.haskell.org/packages/archive/hxt/9.1.4/doc/html/ Control-Arrow-ArrowIO.html # v: arrIO) parece ser el que está buscando. Su implementación es básicamente idéntica a la tuya. – hammar
@hammar: * ¡Ajá! * Gracias, por alguna razón, supuse que tendría "elevación" en el nombre. –
Ahhh sí, ¡eso es precisamente! Cada vez que creo que tengo flechas y mónadas resueltas, termino descifrándolo todo de nuevo ... – John