module Data.Yarr.IO.List where
import Control.Monad
import Data.Yarr.Base
import Data.Yarr.Shape as S
import Data.Yarr.Eval
import Data.Yarr.Walk
import Debug.Yarr
toList
:: (USource r l sh a, PreferredWorkIndex l sh i)
=> UArray r l sh a -> IO [a]
toList = walk (reduceR S.foldr (:)) (return [])
fromList
:: Manifest r mr l sh a
=> sh
-> [a]
-> IO (UArray r l sh a)
fromList sh xs =
if (length xs) /= (size sh)
then yerr "fromList: list length doesn't correspond size of array shape"
else do
arr <- new sh
zipWithM_ (linearWrite arr) [0..] xs
freeze arr