<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Vectorise.Utils</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[ window.onload = function () {pageLoad();setSynopsis("mini_Vectorise-Utils.html");}; //]]> </script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ghc-7.4.2: The GHC API</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Vectorise.Utils</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Annotated Exprs </a></li><li><a href="#g:2">PD Functions </a></li><li><a href="#g:3">Scalars </a></li><li><a href="#g:4">Naming </a></li></ul></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short">module <a href="Vectorise-Utils-Base.html">Vectorise.Utils.Base</a></li><li class="src short">module <a href="Vectorise-Utils-Closure.html">Vectorise.Utils.Closure</a></li><li class="src short">module <a href="Vectorise-Utils-Hoisting.html">Vectorise.Utils.Hoisting</a></li><li class="src short">module <a href="Vectorise-Utils-PADict.html">Vectorise.Utils.PADict</a></li><li class="src short">module <a href="Vectorise-Utils-Poly.html">Vectorise.Utils.Poly</a></li><li class="src short"><a href="#v:collectAnnTypeArgs">collectAnnTypeArgs</a> :: <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> b ann -> (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> b ann, [<a href="Type.html#t:Type">Type</a>])</li><li class="src short"><a href="#v:collectAnnDictArgs">collectAnnDictArgs</a> :: <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> <a href="Var.html#t:Var">Var</a> ann -> (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> <a href="Var.html#t:Var">Var</a> ann, [<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> <a href="Var.html#t:Var">Var</a> ann])</li><li class="src short"><a href="#v:collectAnnTypeBinders">collectAnnTypeBinders</a> :: <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> <a href="Var.html#t:Var">Var</a> ann -> ([<a href="Var.html#t:Var">Var</a>], <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> <a href="Var.html#t:Var">Var</a> ann)</li><li class="src short"><a href="#v:collectAnnValBinders">collectAnnValBinders</a> :: <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> <a href="Var.html#t:Var">Var</a> ann -> ([<a href="Var.html#t:Var">Var</a>], <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> <a href="Var.html#t:Var">Var</a> ann)</li><li class="src short"><a href="#v:isAnnTypeArg">isAnnTypeArg</a> :: <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> b ann -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:replicatePD">replicatePD</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:emptyPD">emptyPD</a> :: <a href="Type.html#t:Type">Type</a> -> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:packByTagPD">packByTagPD</a> :: <a href="Type.html#t:Type">Type</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:combinePD">combinePD</a> :: <a href="Type.html#t:Type">Type</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:liftPD">liftPD</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:zipScalars">zipScalars</a> :: [<a href="Type.html#t:Type">Type</a>] -> <a href="Type.html#t:Type">Type</a> -> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:scalarClosure">scalarClosure</a> :: [<a href="Type.html#t:Type">Type</a>] -> <a href="Type.html#t:Type">Type</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:newLocalVar">newLocalVar</a> :: <a href="FastString.html#t:FastString">FastString</a> -> <a href="Type.html#t:Type">Type</a> -> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="Var.html#t:Var">Var</a></li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src">module <a href="Vectorise-Utils-Base.html">Vectorise.Utils.Base</a></p></div><div class="top"><p class="src">module <a href="Vectorise-Utils-Closure.html">Vectorise.Utils.Closure</a></p></div><div class="top"><p class="src">module <a href="Vectorise-Utils-Hoisting.html">Vectorise.Utils.Hoisting</a></p></div><div class="top"><p class="src">module <a href="Vectorise-Utils-PADict.html">Vectorise.Utils.PADict</a></p></div><div class="top"><p class="src">module <a href="Vectorise-Utils-Poly.html">Vectorise.Utils.Poly</a></p></div><h1 id="g:1">Annotated Exprs </h1><div class="top"><p class="src"><a name="v:collectAnnTypeArgs" class="def">collectAnnTypeArgs</a> :: <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> b ann -> (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> b ann, [<a href="Type.html#t:Type">Type</a>])</p></div><div class="top"><p class="src"><a name="v:collectAnnDictArgs" class="def">collectAnnDictArgs</a> :: <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> <a href="Var.html#t:Var">Var</a> ann -> (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> <a href="Var.html#t:Var">Var</a> ann, [<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> <a href="Var.html#t:Var">Var</a> ann])</p></div><div class="top"><p class="src"><a name="v:collectAnnTypeBinders" class="def">collectAnnTypeBinders</a> :: <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> <a href="Var.html#t:Var">Var</a> ann -> ([<a href="Var.html#t:Var">Var</a>], <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> <a href="Var.html#t:Var">Var</a> ann)</p></div><div class="top"><p class="src"><a name="v:collectAnnValBinders" class="def">collectAnnValBinders</a> :: <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> <a href="Var.html#t:Var">Var</a> ann -> ([<a href="Var.html#t:Var">Var</a>], <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> <a href="Var.html#t:Var">Var</a> ann)</p><div class="doc"><p>Collect all consecutive value binders that are not dictionaries. </p></div></div><div class="top"><p class="src"><a name="v:isAnnTypeArg" class="def">isAnnTypeArg</a> :: <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> b ann -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><h1 id="g:2">PD Functions </h1><div class="top"><p class="src"><a name="v:replicatePD" class="def">replicatePD</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Number of copies in the resulting array. </p></td></tr><tr><td class="src">-> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Value to replicate. </p></td></tr><tr><td class="src">-> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Produce an array containing copies of a given element. </p></div></div><div class="top"><p class="src"><a name="v:emptyPD" class="def">emptyPD</a> :: <a href="Type.html#t:Type">Type</a> -> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>An empty array of the given type. </p></div></div><div class="top"><p class="src"><a name="v:packByTagPD" class="def">packByTagPD</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="Type.html#t:Type">Type</a></td><td class="doc"><p>Element type. </p></td></tr><tr><td class="src">-> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Source array. </p></td></tr><tr><td class="src">-> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Length of resulting array. </p></td></tr><tr><td class="src">-> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Tag values of elements in source array. </p></td></tr><tr><td class="src">-> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>The tag value for the elements to select. </p></td></tr><tr><td class="src">-> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Select some elements from an array that correspond to a particular tag value and pack them into a new array. </p><pre> packByTagPD Int# [:23, 42, 95, 50, 27, 49:] 3 [:1, 2, 1, 2, 3, 2:] 2 ==> [:42, 50, 49:] </pre></div></div><div class="top"><p class="src"><a name="v:combinePD" class="def">combinePD</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="Type.html#t:Type">Type</a></td><td class="doc"><p>Element type </p></td></tr><tr><td class="src">-> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Length of resulting array </p></td></tr><tr><td class="src">-> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Selector. </p></td></tr><tr><td class="src">-> [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>]</td><td class="doc"><p>Arrays to combine. </p></td></tr><tr><td class="src">-> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Combine some arrays based on a selector. The selector says which source array to choose for each element of the resulting array. </p></div></div><div class="top"><p class="src"><a name="v:liftPD" class="def">liftPD</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Like <code><a href="Vectorise-Utils.html#v:replicatePD">replicatePD</a></code> but use the lifting context in the vectoriser state. </p></div></div><h1 id="g:3">Scalars </h1><div class="top"><p class="src"><a name="v:zipScalars" class="def">zipScalars</a> :: [<a href="Type.html#t:Type">Type</a>] -> <a href="Type.html#t:Type">Type</a> -> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p></div><div class="top"><p class="src"><a name="v:scalarClosure" class="def">scalarClosure</a> :: [<a href="Type.html#t:Type">Type</a>] -> <a href="Type.html#t:Type">Type</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p></div><h1 id="g:4">Naming </h1><div class="top"><p class="src"><a name="v:newLocalVar" class="def">newLocalVar</a> :: <a href="FastString.html#t:FastString">FastString</a> -> <a href="Type.html#t:Type">Type</a> -> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="Var.html#t:Var">Var</a></p><div class="doc"><p>Make a fresh local variable with the given type. The variable's name is formed using the given string as the prefix. </p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.11.0</p></div></body></html>