traverse
のa -> Maybe a
-Kleisliをunboxed vector以上にマップする方法を考えながら、既存の実装を探しました。明らかにU.Vector
はTraversable
ではありませんが、Maybe
はもちろん問題ありません。it does supply a mapM
です。Applicative-Traverseアレイがなぜ不可能なのですか?
しかし、問題は:Monad
の制約が本当に必要なのですか?彼らは本当にちょうど彼らがから/への変換リスト、トラバース:まあ、それもboxed vectors cheat for the Traversable
instanceことが判明し
instance Traversable.Traversable Vector where
{-# INLINE traverse #-}
traverse f xs = Data.Vector.fromList Applicative.<$> Traversable.traverse f (toList xs)
mono-traversable
does the same thing also for unboxed vectorsを。ここではこれはもっと悲惨なパフォーマンス志向のようです。
実際にvector
がこれらのハッキングされたトラバーサルの多くをより効率的な形に融合できたとしても、私は驚くことはありませんが、根本的な問題があると思われます。すぐに配列。この無能さに「深い理由」がありますか?
'U.Vector'のインスタンスの欠如は、要素の' Unbox'制約と関係があります。 [* unboxed配列がfoldableのインスタンスではないのはなぜですか?](http://opackoverflow.com/q/36322904/2751851)(Snoymanの回答には、* mono-traversable *に関する関連コメントも含まれています)。 – duplode
もちろん、それは私が求めていることではありません。実際のTraversableインスタンスは必要ありません。効率的なトラバーサルが必要です。そして、「モノトラバーシブル」はこれを提供しません。 – leftaroundabout
おっと - 私はあなたの最初の段落で "明らかに"気づいていません:) – duplode