6

おそらく私はこれを間違った方法で行っていますが、HXTを使用して、HOpenGLの配列で使用したいいくつかの頂点データを読み込みます。頂点配列は、newArrayを呼び出して作成されたPtrである必要があります。残念ながら、newArrayはIO Ptrを返すため、Arrow内でそれを使用する方法がわかりません。IO a-> Arrow aに似た型宣言を持つものが必要だと思いますか?

4

1 に答える 1

5

タイプIO a -> Arrow aは意味がありません。は型クラスであり、またはArrowのような特定の型ではありません。具体的には、のインスタンスは、関数のように構成できるものを記述し、型をエンドツーエンドで照合する2つのパラメーターを受け取る型コンストラクターです。したがって、矢印に変換することは、おそらく概念型エラーと呼ばれる可能性があります。MonadNumArrowIO a

何をしようとしているのか正確にはわかりませんが、IO操作をの一部として本当に使用したい場合は、インスタンスにそれを含めるArrow必要があります。その最も単純な形式は、任意のインスタンスArrowのような型を持つ関数が明白な方法で構成できることを観察することです。パッケージは、より複雑なタイプを提供しているようです。a -> m bMonadhxt

newtype IOSLA s a b = IOSLA { runIOSLA :: s -> a -> IO (s, [b]) }

これは、、、およびモナドの混合物でありIO、上記のように関数にアタッチされているため、各ステップで3つすべてを通過してそれらを構成できます。私はあまり使用していませんが、これらが使用している場合は、任意の関数を持ち上げて1つとして機能させるのは非常に簡単です。状態値を変更せずに渡して、関数の出力を次のように変換するだけです。シングルトンリスト。これを行う機能はすでにあるかもしれませんが、一目見ただけではわかりませんでした。State[]MonadhxtArrowIOs

基本的に、次のようなものが必要です。

liftArrIO :: (a -> IO b) -> IOSLA s a b
liftArrIO f = IOSLA $ \s x -> fmap (\y -> (s, [y])) (f x)
于 2011-08-30T22:05:06.620 に答える