<!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.Generic.Description</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-Generic-Description.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.Generic.Description</p></div><div id="description"><p class="caption">Description</p><div class="doc"><p>Compute a description of the generic representation that we use for a user defined data type. </p><p>During vectorisation, we generate a PRepr and PA instance for each user defined data type. The PA dictionary contains methods to convert the user type to and from our generic representation. This module computes a description of what that generic representation is. </p></div></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"><span class="keyword">data</span> <a href="#t:CompRepr">CompRepr</a> <ul class="subs"><li>= <a href="#v:Keep">Keep</a> <a href="Type.html#t:Type">Type</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> </li><li>| <a href="#v:Wrap">Wrap</a> <a href="Type.html#t:Type">Type</a> </li></ul></li><li class="src short"><span class="keyword">data</span> <a href="#t:ProdRepr">ProdRepr</a> <ul class="subs"><li>= <a href="#v:EmptyProd">EmptyProd</a> </li><li>| <a href="#v:UnaryProd">UnaryProd</a> <a href="Vectorise-Generic-Description.html#t:CompRepr">CompRepr</a> </li><li>| <a href="#v:Prod">Prod</a> { <ul class="subs"><li><a href="#v:repr_tup_tc">repr_tup_tc</a> :: <a href="TyCon.html#t:TyCon">TyCon</a></li><li><a href="#v:repr_ptup_tc">repr_ptup_tc</a> :: <a href="TyCon.html#t:TyCon">TyCon</a></li><li><a href="#v:repr_ptups_tc">repr_ptups_tc</a> :: <a href="TyCon.html#t:TyCon">TyCon</a></li><li><a href="#v:repr_comp_tys">repr_comp_tys</a> :: [<a href="Type.html#t:Type">Type</a>]</li><li><a href="#v:repr_comps">repr_comps</a> :: [<a href="Vectorise-Generic-Description.html#t:CompRepr">CompRepr</a>]</li></ul> }</li></ul></li><li class="src short"><span class="keyword">data</span> <a href="#t:ConRepr">ConRepr</a> = <a href="#v:ConRepr">ConRepr</a> {<ul class="subs"><li><a href="#v:repr_dc">repr_dc</a> :: <a href="DataCon.html#t:DataCon">DataCon</a></li><li><a href="#v:repr_prod">repr_prod</a> :: <a href="Vectorise-Generic-Description.html#t:ProdRepr">ProdRepr</a></li></ul>}</li><li class="src short"><span class="keyword">data</span> <a href="#t:SumRepr">SumRepr</a> <ul class="subs"><li>= <a href="#v:EmptySum">EmptySum</a> </li><li>| <a href="#v:UnarySum">UnarySum</a> <a href="Vectorise-Generic-Description.html#t:ConRepr">ConRepr</a> </li><li>| <a href="#v:Sum">Sum</a> { <ul class="subs"><li><a href="#v:repr_sum_tc">repr_sum_tc</a> :: <a href="TyCon.html#t:TyCon">TyCon</a></li><li><a href="#v:repr_psum_tc">repr_psum_tc</a> :: <a href="TyCon.html#t:TyCon">TyCon</a></li><li><a href="#v:repr_psums_tc">repr_psums_tc</a> :: <a href="TyCon.html#t:TyCon">TyCon</a></li><li><a href="#v:repr_sel_ty">repr_sel_ty</a> :: <a href="Type.html#t:Type">Type</a></li><li><a href="#v:repr_sels_ty">repr_sels_ty</a> :: <a href="Type.html#t:Type">Type</a></li><li><a href="#v:repr_selsLength_v">repr_selsLength_v</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li><a href="#v:repr_con_tys">repr_con_tys</a> :: [<a href="Type.html#t:Type">Type</a>]</li><li><a href="#v:repr_cons">repr_cons</a> :: [<a href="Vectorise-Generic-Description.html#t:ConRepr">ConRepr</a>]</li></ul> }</li></ul></li><li class="src short"><a href="#v:tyConRepr">tyConRepr</a> :: <a href="TyCon.html#t:TyCon">TyCon</a> -> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="Vectorise-Generic-Description.html#t:SumRepr">SumRepr</a></li><li class="src short"><a href="#v:sumReprType">sumReprType</a> :: <a href="Vectorise-Generic-Description.html#t:SumRepr">SumRepr</a> -> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="Type.html#t:Type">Type</a></li><li class="src short"><a href="#v:compOrigType">compOrigType</a> :: <a href="Vectorise-Generic-Description.html#t:CompRepr">CompRepr</a> -> <a href="Type.html#t:Type">Type</a></li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:CompRepr" class="def">CompRepr</a> </p><div class="doc"><p>Describes the representation type of a data constructor field. </p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Keep" class="def">Keep</a> <a href="Type.html#t:Type">Type</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a name="v:Wrap" class="def">Wrap</a> <a href="Type.html#t:Type">Type</a></td><td class="doc empty"> </td></tr></table></div><div class="subs instances"><p id="control.i:CompRepr" class="caption collapser" onclick="toggleSection('i:CompRepr')">Instances</p><div id="section.i:CompRepr" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="Vectorise-Generic-Description.html#t:CompRepr">CompRepr</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:ProdRepr" class="def">ProdRepr</a> </p><div class="doc"><p>Describes the representation type of the fields / components of a constructor. If the data constructor has multiple fields then we bundle them together into a generic product type. </p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:EmptyProd" class="def">EmptyProd</a></td><td class="doc"><p>Data constructor has no fields. </p></td></tr><tr><td class="src"><a name="v:UnaryProd" class="def">UnaryProd</a> <a href="Vectorise-Generic-Description.html#t:CompRepr">CompRepr</a></td><td class="doc"><p>Data constructor has a single field. </p></td></tr><tr><td class="src"><a name="v:Prod" class="def">Prod</a></td><td class="doc"><p>Data constructor has several fields. </p></td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:repr_tup_tc" class="def">repr_tup_tc</a> :: <a href="TyCon.html#t:TyCon">TyCon</a></dt><dd class="doc"><p>Representation tycon for the product (eg Tuple2) </p></dd><dt class="src"><a name="v:repr_ptup_tc" class="def">repr_ptup_tc</a> :: <a href="TyCon.html#t:TyCon">TyCon</a></dt><dd class="doc"><p>PData version of the product tycon (eg PDataTuple2) </p></dd><dt class="src"><a name="v:repr_ptups_tc" class="def">repr_ptups_tc</a> :: <a href="TyCon.html#t:TyCon">TyCon</a></dt><dd class="doc"><p>PDatas version of the product tycon (eg PDatasTuple2s) Not all lifted backends use <code>PDatas</code>. </p></dd><dt class="src"><a name="v:repr_comp_tys" class="def">repr_comp_tys</a> :: [<a href="Type.html#t:Type">Type</a>]</dt><dd class="doc"><p>Types of each field. </p></dd><dt class="src"><a name="v:repr_comps" class="def">repr_comps</a> :: [<a href="Vectorise-Generic-Description.html#t:CompRepr">CompRepr</a>]</dt><dd class="doc"><p>Generic representation types for each field. </p></dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:ProdRepr" class="caption collapser" onclick="toggleSection('i:ProdRepr')">Instances</p><div id="section.i:ProdRepr" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="Vectorise-Generic-Description.html#t:ProdRepr">ProdRepr</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:ConRepr" class="def">ConRepr</a> </p><div class="doc"><p>Describes the representation type of a data constructor. </p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:ConRepr" class="def">ConRepr</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:repr_dc" class="def">repr_dc</a> :: <a href="DataCon.html#t:DataCon">DataCon</a></dt><dd class="doc empty"> </dd><dt class="src"><a name="v:repr_prod" class="def">repr_prod</a> :: <a href="Vectorise-Generic-Description.html#t:ProdRepr">ProdRepr</a></dt><dd class="doc empty"> </dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:ConRepr" class="caption collapser" onclick="toggleSection('i:ConRepr')">Instances</p><div id="section.i:ConRepr" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="Vectorise-Generic-Description.html#t:ConRepr">ConRepr</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:SumRepr" class="def">SumRepr</a> </p><div class="doc"><p>Describes the generic representation of a data type. If the data type has multiple constructors then we bundle them together into a generic sum type. </p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:EmptySum" class="def">EmptySum</a></td><td class="doc"><p>Data type has no data constructors. </p></td></tr><tr><td class="src"><a name="v:UnarySum" class="def">UnarySum</a> <a href="Vectorise-Generic-Description.html#t:ConRepr">ConRepr</a></td><td class="doc"><p>Data type has a single constructor. </p></td></tr><tr><td class="src"><a name="v:Sum" class="def">Sum</a></td><td class="doc"><p>Data type has multiple constructors. </p></td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:repr_sum_tc" class="def">repr_sum_tc</a> :: <a href="TyCon.html#t:TyCon">TyCon</a></dt><dd class="doc"><p>Representation tycon for the sum (eg Sum2) </p></dd><dt class="src"><a name="v:repr_psum_tc" class="def">repr_psum_tc</a> :: <a href="TyCon.html#t:TyCon">TyCon</a></dt><dd class="doc"><p>PData version of the sum tycon (eg PDataSum2) This TyCon doesn't appear explicitly in the source program. See Note [PData TyCons]. </p></dd><dt class="src"><a name="v:repr_psums_tc" class="def">repr_psums_tc</a> :: <a href="TyCon.html#t:TyCon">TyCon</a></dt><dd class="doc"><p>PDatas version of the sum tycon (eg PDatasSum2) </p></dd><dt class="src"><a name="v:repr_sel_ty" class="def">repr_sel_ty</a> :: <a href="Type.html#t:Type">Type</a></dt><dd class="doc"><p>Type of the selector (eg Sel2) </p></dd><dt class="src"><a name="v:repr_sels_ty" class="def">repr_sels_ty</a> :: <a href="Type.html#t:Type">Type</a></dt><dd class="doc"><p>Type of multi-selector (eg Sel2s) </p></dd><dt class="src"><a name="v:repr_selsLength_v" class="def">repr_selsLength_v</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></dt><dd class="doc"><p>Function to get the length of a Sels of this type. </p></dd><dt class="src"><a name="v:repr_con_tys" class="def">repr_con_tys</a> :: [<a href="Type.html#t:Type">Type</a>]</dt><dd class="doc"><p>Type of each data constructor. </p></dd><dt class="src"><a name="v:repr_cons" class="def">repr_cons</a> :: [<a href="Vectorise-Generic-Description.html#t:ConRepr">ConRepr</a>]</dt><dd class="doc"><p>Generic representation types of each data constructor. </p></dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:SumRepr" class="caption collapser" onclick="toggleSection('i:SumRepr')">Instances</p><div id="section.i:SumRepr" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="Vectorise-Generic-Description.html#t:SumRepr">SumRepr</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:tyConRepr" class="def">tyConRepr</a> :: <a href="TyCon.html#t:TyCon">TyCon</a> -> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="Vectorise-Generic-Description.html#t:SumRepr">SumRepr</a></p><div class="doc"><p>Determine the generic representation of a data type, given its tycon. </p></div></div><div class="top"><p class="src"><a name="v:sumReprType" class="def">sumReprType</a> :: <a href="Vectorise-Generic-Description.html#t:SumRepr">SumRepr</a> -> <a href="Vectorise-Monad-Base.html#t:VM">VM</a> <a href="Type.html#t:Type">Type</a></p><div class="doc"><p>Yield the type of this sum representation. </p></div></div><div class="top"><p class="src"><a name="v:compOrigType" class="def">compOrigType</a> :: <a href="Vectorise-Generic-Description.html#t:CompRepr">CompRepr</a> -> <a href="Type.html#t:Type">Type</a></p><div class="doc"><p>Yield the original component type of a data constructor component representation. </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>