                            gen <- create
                            arr <- newArrayData n
                            let write ix = unsafeWriteArrayData arr (Sugar.toIndex sh ix)
                                         . fromElt =<< f ix gen

                            iter sh write (>>) (return ())
                            return (arr, undefined)

    in adata `seq` Array (fromElt sh) adata