Belki de bu yanlış yoldan gidiyorum, ancak HOpenGL'de bir dizide kullanmak istediğim bazı vertex verilerinde okumak için HXT kullanıyorum. Vertex dizilerinin newArray çağrılarak oluşturulmuş bir Ptr olması gerekir. Ne yazık ki, newArray bir IO Ptr döndürüyor, bu yüzden bir Ok içinde kullanmak için nasıl gideceğinden emin değilim. Sanırım IO a -> Ok a'ya benzer türde bir bildirime ihtiyacım var.Bir Ok İçinde bir IO Monad çağırma
cevap
IO a -> Arrow a
türü anlamlı değildir; Arrow
, tür sınıfı değil, belirli bir tür değil, Monad
veya Num
gibi. Spesifik olarak, Arrow
'un bir örneği, işlevler ve uçtan uca eşleme türleri gibi oluşturulabilecek şeyleri tanımlayan iki parametreyi alan bir tür kurucudur. Yani, IO a
'u bir oka dönüştürmek, bir kavramsal tip hatası olarak adlandırılabilir.
Arrow
parçası olarak
IO
işlemleri kullanarak istiyorsanız, bunu içerecek şekilde
Arrow
örneğini gerekir. Bunun en basit şekli,örneği için
a -> m b
gibi işlevlerin, açık şekilde oluşturulabileceğini gözlemektir. Onları her üç
Monad
s geçmekte oluşturduğunuz ki yukarıdaki gibi bu
IO
,
State
ve
[]
monad'ların bazı karışımıdır
newtype IOSLA s a b = IOSLA { runIOSLA :: s -> a -> IO (s, [b]) }
, bir işleve bağlı: hxt
paket daha karmaşık bir türü sağlamak gibi görünüyor her adımda. Ben gerçekten hxt
kullanmıyoruz, ama bunlar ile çalışıyorsanız Arrow
s çalışıyorsanız, bir rasgele IO
işlevini kaldırmak için oldukça basit - tek bir değişiklik yapmadan s
durum değerini geçmek ve çıktıyı açmak tekil listeye fonksiyonun. Bunu sizin için bir işlev zaten olabilir, ancak kısa bir bakışta görmedim.
liftArrIO :: (a -> IO b) -> IOSLA s a b
liftArrIO f = IOSLA $ \s x -> fmap (\y -> (s, [y])) (f x)
- 1. IO monad içinde bir monad kullanma
- 2. Kısa devre VE IO Monad içinde
- 3. Scala IO monad: ne anlamı var?
- 4. IO monad ile Mantıksal ve Kesinlik
- 5. Ben monads bir yığın varsa monad yığını
- 6. Happstack'ta bir veritabanı Monad Stack nasıl oluşturulur?
- 7. Dışarıdan bir jQuery eklentisi içinde işlev çağırma
- 8. OCaml: Başka bir işlev içinde işlev çağırma
- 9. Haskell'de nesne silme işleminde bir işlev çağırma
- 10. Bir WAI (Çözgü) Uygulamasında IO nasıl gerçekleştirilir?
- 11. Geç yanıt async io içinde Akka içinde
- 12. JPA içinde çağırma yöntemi
- 13. this.emit() bir ok işlevinde
- 14. İçinde ok işlevlerini kullanma React.createClass
- 15. Haskeline içinde basit IO'yu InputT monad içinde gerçekleştirin, güvensizPerformio'ya başvurmak zorunda kalmadan,
- 16. Monad transformatörlerinde istisnaları yakalamak
- 17. İç içe bir türü bir monad trafo kümesine dönüştürme
- 18. ColdFusion'dan bir .jar çağırma
- 19. WPF bir kontrol çağırma
- 20. Geçersiz bir yöntem çağırma
- 21. Bir üye işlevini çağırma
- 22. Monad transformatörlerindeki tip eşanlamlıların kullanımı
- 23. Io operatörleri, onları bir dosyada oluşturamıyor görünüyor
- 24. Devam Monitörü içindeki IO monadından kaçış
- 25. bir Reader ve belki Monad (Uygulamalı funktoru)
- 26. Tuple neden bir Monad örneğine sahip değil?
- 27. Bir trafo olarak monad kompozisyonunun soyutlanması
- 28. HasOn'da kendi monadıma IO nasıl eklenir?
- 29. Neden ListT monad transformer buggy'yi ele alıyor - hangi monad yasalarını ihlal ediyor?
- 30. Bir hizmetten etkinlikte yöntem çağırma
[ 'arrIO'] (http://hackage.haskell.org/packages/archive/hxt/9.1.4/doc/html/:
Temelde, böyle bir şey ister ki Control-Arrow-ArrowIO.html # v: arrIO) aradığı gibi görünüyor. Uygulaması temel olarak sizinkilerle aynıdır. – hammar
@hammar: * Aha! * Teşekkürler, bir nedenden dolayı isminde "kaldırma" olacağını düşündüm. –
Ahhh evet, işte tam olarak bu! Her seferinde oklarım ve monad'ları anladığımı düşündüğümde, onları tekrar ortaya çıkarmaya başladım. – John