11
Se si dispone di un'istanza Traversable
, xs
, come si converte in Vector
?Come convertire un Haskell Traversable in un vettore?
Se si dispone di un'istanza Traversable
, xs
, come si converte in Vector
?Come convertire un Haskell Traversable in un vettore?
Tutti Traversable
casi sono anche Foldable
, in modo da poter scrivere qualcosa di simile
toVector :: Foldable t => t a -> Vector a
toVector = Vector.fromList . Foldable.toList
{-# INLINE toVector #-}
Questo potrebbe fare una lista intermedia, però, se questo non viene fusa via. L'inlining dovrebbe aiutare a rendere più probabile la fusione.
Ho appena avuto un tentativo e sembra che l'ostacolo più grande è che i consumatori di 'Vector', fondamentalmente, possono fondersi solo con tipi di dati che possono essere trasformati in modo efficiente nel tipo' Stream' della libreria. Quindi non penso che tu possa fondere i consumatori di 'Vector' con un' Foldable's arbitrario per ragioni simili al motivo per cui non puoi implementare 'uncons :: [a] -> Maybe (a, [a])' efficientemente con solo 'foldr'. (Prova a scrivere 'toVector' in termini di' Foldable.foldr' e 'Stream.unfoldr', senza reimplementare in modo efficace' Foldable.toList'-Non penso che possa essere fatto ...) Quindi la tua soluzione potrebbe essere ottimale . –