Dear all,<br><br>I came up with an idea to greatly simplify some kinds of array computations. It should work well with many kinds of arrays. Is this new?<br><br><a href="https://gist.github.com/4162375">https://gist.github.com/4162375</a><br>


<br><br><br>These few days, I&#39;ve been trying to rewrite a hydrodynamic simulation code that used Data.Vector (~250 lines), to Repa [1] . It seemed promising, but soon I realized that I needed to use Repa.map and Repa.zipWith almost everywhere. I need careful thinking to transform every lines (that used vector&#39;s indexing) to Repa&#39;s point-free stile. Is there any better ways?<br>

<br>Then I realized that I was the author of Paraiso [2], a DSL for stencil computation. One of its feature is to write down array computation just as if it were scalar computation.<br><br>Basically what I need is ZipList-like Applicative instances for vectors and Repa arrays. Why not they support ZipVector? Because &#39;pure&#39; of zipList was an infinite list and you can&#39;t do infinite vectors. Then I came up with this idea.<br>

<br><a href="https://gist.github.com/4162375">https://gist.github.com/4162375</a><br>
<br>the wrapper W does several things: it represents the &#39;pure,&#39; homogeneous array in a space-efficient manner, and also serves as a newtype-wrapper of Num (and possibly Fractional, Floating...) instances.<br><br>

Questions are: is this technology new? or promising? doomed?<br>It seems to me like a free-Applicative, like the free-Monad theory. Are they related?<br>The function &#39;backend&#39; helps to mix in the non-zip-like computations. How can we remove the &#39;undefined&#39; in the &#39;backend?&#39;<br>

Some of Repa computations are Monads. W needs to be a monad transformer to incooperate this.<br><br>Also I&#39;m grateful to past cafe discussion on existing Zippable implementations [3][4] .<br><br>[1] <a href="http://hackage.haskell.org/package/repa">hackage.haskell.org/package/repa</a><br>

[2] <a href="http://hackage.haskell.org/package/Paraiso">http://hackage.haskell.org/package/Paraiso</a><br>[3] <a href="http://www.haskell.org/pipermail/haskell-cafe/2009-July/064403.html">http://www.haskell.org/pipermail/haskell-cafe/2009-July/064403.html</a><br>

[4] <a href="http://hackage.haskell.org/packages/archive/category-extras/latest/doc/html/Control-Functor-Zip.html">http://hackage.haskell.org/packages/archive/category-extras/latest/doc/html/Control-Functor-Zip.html</a><br>

<br clear="all"><br>-- <br>Takayuki MURANUSHI<br>The Hakubi Center for Advanced Research, Kyoto University<br><a href="http://www.hakubi.kyoto-u.ac.jp/02_mem/h22/muranushi.html" target="_blank">http://www.hakubi.kyoto-u.ac.jp/02_mem/h22/muranushi.html</a><br>