<!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><link rel="stylesheet" type="text/css" href="style.css" /><script type="text/javascript" src="highlight.js"></script></head><body><pre><span class="hs-comment">-- | This module helps parse the proto OpDef into a Haskell type which is more</span><span>
</span><a name="line-2"></a><span class="hs-comment">-- descriptive of how the attributes and arguments will be used in the</span><span>
</span><a name="line-3"></a><span class="hs-comment">-- generated code.</span><span>
</span><a name="line-4"></a><span class="hs-pragma">{-# LANGUAGE LambdaCase #-}</span><span>
</span><a name="line-5"></a><span class="hs-pragma">{-# LANGUAGE OverloadedStrings #-}</span><span>
</span><a name="line-6"></a><span class="hs-pragma">{-# LANGUAGE RecordWildCards #-}</span><span>
</span><a name="line-7"></a><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">TensorFlow</span><span class="hs-operator">.</span><span class="hs-identifier">OpGen</span><span class="hs-operator">.</span><span class="hs-identifier">ParsedOp</span><span>
</span><a name="line-8"></a><span>    </span><span class="hs-special">(</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ParsedOp"><span class="hs-identifier hs-type">ParsedOp</span></a><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><a name="line-9"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#Name"><span class="hs-identifier hs-type">Name</span></a><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><a name="line-10"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#HaskellName"><span class="hs-identifier hs-type">HaskellName</span></a><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><a name="line-11"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#TFName"><span class="hs-identifier hs-type">TFName</span></a><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><a name="line-12"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#Attr"><span class="hs-identifier hs-type">Attr</span></a><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><a name="line-13"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrType"><span class="hs-identifier hs-type">AttrType</span></a><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><a name="line-14"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrBaseType"><span class="hs-identifier hs-type">AttrBaseType</span></a><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><a name="line-15"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#TypeParam"><span class="hs-identifier hs-type">TypeParam</span></a><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><a name="line-16"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ParsedArg"><span class="hs-identifier hs-type">ParsedArg</span></a><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><a name="line-17"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ParsedArgCase"><span class="hs-identifier hs-type">ParsedArgCase</span></a><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><a name="line-18"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgType"><span class="hs-identifier hs-type">ArgType</span></a><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><a name="line-19"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgKind"><span class="hs-identifier hs-type">ArgKind</span></a><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><a name="line-20"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#parseOp"><span class="hs-identifier hs-var">parseOp</span></a><span>
</span><a name="line-21"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#camelCase"><span class="hs-identifier hs-var">camelCase</span></a><span>
</span><a name="line-22"></a><span>    </span><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-23"></a><span>
</span><a name="line-24"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Char</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">toUpper</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">toLower</span><span class="hs-special">)</span><span>
</span><a name="line-25"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">List</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">sortBy</span><span class="hs-special">)</span><span>
</span><a name="line-26"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">List</span><span class="hs-operator">.</span><span class="hs-identifier">NonEmpty</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">NonEmpty</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">nonEmpty</span><span class="hs-special">)</span><span>
</span><a name="line-27"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Maybe</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">mapMaybe</span><span class="hs-special">)</span><span>
</span><a name="line-28"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Monoid</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-operator hs-var">&lt;&gt;</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a name="line-29"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Ord</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">comparing</span><span class="hs-special">)</span><span>
</span><a name="line-30"></a><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Set</span><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">Set</span><span>
</span><a name="line-31"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Text</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Text</span><span class="hs-special">)</span><span>
</span><a name="line-32"></a><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Text</span><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">Text</span><span>
</span><a name="line-33"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Lens</span><span class="hs-operator">.</span><span class="hs-identifier">Family2</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-operator hs-var">^.</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a name="line-34"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Proto</span><span class="hs-operator">.</span><span class="hs-identifier">Tensorflow</span><span class="hs-operator">.</span><span class="hs-identifier">Core</span><span class="hs-operator">.</span><span class="hs-identifier">Framework</span><span class="hs-operator">.</span><span class="hs-identifier">AttrValue</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">list</span><span class="hs-special">)</span><span>
</span><a name="line-35"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Proto</span><span class="hs-operator">.</span><span class="hs-identifier">Tensorflow</span><span class="hs-operator">.</span><span class="hs-identifier">Core</span><span class="hs-operator">.</span><span class="hs-identifier">Framework</span><span class="hs-operator">.</span><span class="hs-identifier">OpDef</span><span>
</span><a name="line-36"></a><span>    </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">OpDef</span><span>
</span><a name="line-37"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">OpDef'ArgDef</span><span>
</span><a name="line-38"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">OpDef'AttrDef</span><span>
</span><a name="line-39"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">allowedValues</span><span>
</span><a name="line-40"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">attr</span><span>
</span><a name="line-41"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">maybe'defaultValue</span><span>
</span><a name="line-42"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">description</span><span>
</span><a name="line-43"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">name</span><span>
</span><a name="line-44"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">inputArg</span><span>
</span><a name="line-45"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">isRef</span><span>
</span><a name="line-46"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">isStateful</span><span>
</span><a name="line-47"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">outputArg</span><span>
</span><a name="line-48"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">summary</span><span>
</span><a name="line-49"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">typeListAttr</span><span>
</span><a name="line-50"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">numberAttr</span><span>
</span><a name="line-51"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">typeAttr</span><span>
</span><a name="line-52"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">type'</span><span>
</span><a name="line-53"></a><span>    </span><span class="hs-special">)</span><span>
</span><a name="line-54"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Proto</span><span class="hs-operator">.</span><span class="hs-identifier">Tensorflow</span><span class="hs-operator">.</span><span class="hs-identifier">Core</span><span class="hs-operator">.</span><span class="hs-identifier">Framework</span><span class="hs-operator">.</span><span class="hs-identifier">Types</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">DataType</span><span class="hs-special">(</span><span class="hs-identifier hs-var">DT_RESOURCE</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a name="line-55"></a><span>
</span><a name="line-56"></a><span class="hs-keyword">data</span><span> </span><a name="ParsedOp"><a href="TensorFlow.OpGen.ParsedOp.html#ParsedOp"><span class="hs-identifier">ParsedOp</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a name="ParsedOp"><a href="TensorFlow.OpGen.ParsedOp.html#ParsedOp"><span class="hs-identifier">ParsedOp</span></a></a><span>
</span><a name="line-57"></a><span>    </span><span class="hs-special">{</span><span> </span><a name="parsedOpName"><a href="TensorFlow.OpGen.ParsedOp.html#parsedOpName"><span class="hs-identifier">parsedOpName</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#Name"><span class="hs-identifier hs-type">Name</span></a><span>
</span><a name="line-58"></a><span>    </span><span class="hs-special">,</span><span> </span><a name="parsedOpSummary"><a href="TensorFlow.OpGen.ParsedOp.html#parsedOpSummary"><span class="hs-identifier">parsedOpSummary</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Text</span><span>
</span><a name="line-59"></a><span>    </span><span class="hs-special">,</span><span> </span><a name="parsedOpDescription"><a href="TensorFlow.OpGen.ParsedOp.html#parsedOpDescription"><span class="hs-identifier">parsedOpDescription</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Text</span><span>
</span><a name="line-60"></a><span>    </span><span class="hs-special">,</span><span> </span><a name="parsedInputs"><a href="TensorFlow.OpGen.ParsedOp.html#parsedInputs"><span class="hs-identifier">parsedInputs</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><a href="TensorFlow.OpGen.ParsedOp.html#ParsedArg"><span class="hs-identifier hs-type">ParsedArg</span></a><span class="hs-special">]</span><span>
</span><a name="line-61"></a><span>    </span><span class="hs-special">,</span><span> </span><a name="parsedOutputs"><a href="TensorFlow.OpGen.ParsedOp.html#parsedOutputs"><span class="hs-identifier">parsedOutputs</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><a href="TensorFlow.OpGen.ParsedOp.html#ParsedArg"><span class="hs-identifier hs-type">ParsedArg</span></a><span class="hs-special">]</span><span>
</span><a name="line-62"></a><span>    </span><span class="hs-special">,</span><span> </span><a name="explicitInputAttrs"><a href="TensorFlow.OpGen.ParsedOp.html#explicitInputAttrs"><span class="hs-identifier">explicitInputAttrs</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><a href="TensorFlow.OpGen.ParsedOp.html#Attr"><span class="hs-identifier hs-type">Attr</span></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrType"><span class="hs-identifier hs-type">AttrType</span></a><span class="hs-special">]</span><span>
</span><a name="line-63"></a><span>        </span><span class="hs-comment">-- ^ Attributes that must be set explicitly when creating the op.</span><span>
</span><a name="line-64"></a><span>        </span><span class="hs-comment">-- Associated with the type of the attribute.</span><span>
</span><a name="line-65"></a><span>    </span><span class="hs-special">,</span><span> </span><a name="inferredTypeAttrs"><a href="TensorFlow.OpGen.ParsedOp.html#inferredTypeAttrs"><span class="hs-identifier">inferredTypeAttrs</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><a href="TensorFlow.OpGen.ParsedOp.html#Attr"><span class="hs-identifier hs-type">Attr</span></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#TypeParam"><span class="hs-identifier hs-type">TypeParam</span></a><span class="hs-special">]</span><span>
</span><a name="line-66"></a><span>        </span><span class="hs-comment">-- ^ Attributes that are type parameters.</span><span>
</span><a name="line-67"></a><span>    </span><span class="hs-special">,</span><span> </span><a name="inferredListSizeAttrs"><a href="TensorFlow.OpGen.ParsedOp.html#inferredListSizeAttrs"><span class="hs-identifier">inferredListSizeAttrs</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><a href="TensorFlow.OpGen.ParsedOp.html#Attr"><span class="hs-identifier hs-type">Attr</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">NonEmpty</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#Name"><span class="hs-identifier hs-type">Name</span></a><span class="hs-special">)</span><span class="hs-special">]</span><span>
</span><a name="line-68"></a><span>        </span><span class="hs-comment">-- Attributes which are list sizes (ints) that are inferred automatically</span><span>
</span><a name="line-69"></a><span>        </span><span class="hs-comment">-- from one or more of the input tensors.</span><span>
</span><a name="line-70"></a><span>        </span><span class="hs-comment">-- Associated with the list of tensors whose size it describes.</span><span>
</span><a name="line-71"></a><span>    </span><span class="hs-special">,</span><span> </span><a name="parsedOpIsMonadic"><a href="TensorFlow.OpGen.ParsedOp.html#parsedOpIsMonadic"><span class="hs-identifier">parsedOpIsMonadic</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Bool</span><span>
</span><a name="line-72"></a><span>        </span><span class="hs-comment">-- ^ Whether this op is stateful or takes a stateful input.  Such ops</span><span>
</span><a name="line-73"></a><span>        </span><span class="hs-comment">-- should not be CSE'd and must be monadic in our API (i.e., return a</span><span>
</span><a name="line-74"></a><span>        </span><span class="hs-comment">-- Build action).</span><span>
</span><a name="line-75"></a><span>    </span><span class="hs-special">}</span><span>
</span><a name="line-76"></a><span>
</span><a name="line-77"></a><span class="hs-keyword">data</span><span> </span><a name="Name"><a href="TensorFlow.OpGen.ParsedOp.html#Name"><span class="hs-identifier">Name</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a name="Name"><a href="TensorFlow.OpGen.ParsedOp.html#Name"><span class="hs-identifier">Name</span></a></a><span>
</span><a name="line-78"></a><span>    </span><span class="hs-special">{</span><span> </span><a name="haskellName"><a href="TensorFlow.OpGen.ParsedOp.html#haskellName"><span class="hs-identifier">haskellName</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#HaskellName"><span class="hs-identifier hs-type">HaskellName</span></a><span>
</span><a name="line-79"></a><span>    </span><span class="hs-special">,</span><span> </span><a name="tfName"><a href="TensorFlow.OpGen.ParsedOp.html#tfName"><span class="hs-identifier">tfName</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#TFName"><span class="hs-identifier hs-type">TFName</span></a><span>
</span><a name="line-80"></a><span>    </span><span class="hs-special">}</span><span>
</span><a name="line-81"></a><span>
</span><a name="line-82"></a><span class="hs-comment">-- | A raw name as specified in the OpDef proto.</span><span>
</span><a name="line-83"></a><span class="hs-keyword">newtype</span><span> </span><a name="TFName"><a href="TensorFlow.OpGen.ParsedOp.html#TFName"><span class="hs-identifier">TFName</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a name="TFName"><a href="TensorFlow.OpGen.ParsedOp.html#TFName"><span class="hs-identifier">TFName</span></a></a><span> </span><span class="hs-special">{</span><span> </span><a name="unTFName"><a href="TensorFlow.OpGen.ParsedOp.html#unTFName"><span class="hs-identifier">unTFName</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Text</span><span> </span><span class="hs-special">}</span><span>
</span><a name="line-84"></a><span>    </span><span class="hs-keyword">deriving</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Eq</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Ord</span><span class="hs-special">)</span><span>
</span><a name="line-85"></a><span>
</span><a name="line-86"></a><span class="hs-comment">-- | A name that's appropriate for a variable in a Haskell source file.</span><span>
</span><a name="line-87"></a><span class="hs-keyword">newtype</span><span> </span><a name="HaskellName"><a href="TensorFlow.OpGen.ParsedOp.html#HaskellName"><span class="hs-identifier">HaskellName</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a name="HaskellName"><a href="TensorFlow.OpGen.ParsedOp.html#HaskellName"><span class="hs-identifier">HaskellName</span></a></a><span> </span><span class="hs-special">{</span><span> </span><a name="unHaskellName"><a href="TensorFlow.OpGen.ParsedOp.html#unHaskellName"><span class="hs-identifier">unHaskellName</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Text</span><span> </span><span class="hs-special">}</span><span>
</span><a name="line-88"></a><span>
</span><a name="line-89"></a><span class="hs-comment">-- | A named attribute, associated with some information about it.</span><span>
</span><a name="line-90"></a><span class="hs-keyword">data</span><span> </span><a name="Attr"><a href="TensorFlow.OpGen.ParsedOp.html#Attr"><span class="hs-identifier">Attr</span></a></a><span> </span><a name="local-6989586621679036418"><a href="#local-6989586621679036418"><span class="hs-identifier">a</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a name="Attr"><a href="TensorFlow.OpGen.ParsedOp.html#Attr"><span class="hs-identifier">Attr</span></a></a><span>
</span><a name="line-91"></a><span>    </span><span class="hs-special">{</span><span> </span><a name="attrName"><a href="TensorFlow.OpGen.ParsedOp.html#attrName"><span class="hs-identifier">attrName</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#Name"><span class="hs-identifier hs-type">Name</span></a><span>
</span><a name="line-92"></a><span>    </span><span class="hs-special">,</span><span> </span><a name="attrDescription"><a href="TensorFlow.OpGen.ParsedOp.html#attrDescription"><span class="hs-identifier">attrDescription</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Text</span><span>
</span><a name="line-93"></a><span>    </span><span class="hs-special">,</span><span> </span><a name="attrInfo"><a href="TensorFlow.OpGen.ParsedOp.html#attrInfo"><span class="hs-identifier">attrInfo</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="#local-6989586621679036418"><span class="hs-identifier hs-type">a</span></a><span>
</span><a name="line-94"></a><span>    </span><span class="hs-special">}</span><span>
</span><a name="line-95"></a><span>
</span><a name="line-96"></a><span class="hs-comment">-- | The type of an attribute.</span><span>
</span><a name="line-97"></a><span class="hs-keyword">data</span><span> </span><a name="AttrType"><a href="TensorFlow.OpGen.ParsedOp.html#AttrType"><span class="hs-identifier">AttrType</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a name="AttrSingle"><a href="TensorFlow.OpGen.ParsedOp.html#AttrSingle"><span class="hs-identifier">AttrSingle</span></a></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrBaseType"><span class="hs-identifier hs-type">AttrBaseType</span></a><span>
</span><a name="line-98"></a><span>                </span><span class="hs-glyph">|</span><span> </span><a name="AttrList"><a href="TensorFlow.OpGen.ParsedOp.html#AttrList"><span class="hs-identifier">AttrList</span></a></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrBaseType"><span class="hs-identifier hs-type">AttrBaseType</span></a><span>
</span><a name="line-99"></a><span>                </span><span class="hs-keyword">deriving</span><span> </span><span class="hs-identifier hs-type">Eq</span><span>
</span><a name="line-100"></a><span>
</span><a name="line-101"></a><span class="hs-keyword">data</span><span> </span><a name="AttrBaseType"><a href="TensorFlow.OpGen.ParsedOp.html#AttrBaseType"><span class="hs-identifier">AttrBaseType</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a name="AttrBytes"><a href="TensorFlow.OpGen.ParsedOp.html#AttrBytes"><span class="hs-identifier">AttrBytes</span></a></a><span> </span><span class="hs-glyph">|</span><span> </span><a name="AttrInt64"><a href="TensorFlow.OpGen.ParsedOp.html#AttrInt64"><span class="hs-identifier">AttrInt64</span></a></a><span> </span><span class="hs-glyph">|</span><span> </span><a name="AttrFloat"><a href="TensorFlow.OpGen.ParsedOp.html#AttrFloat"><span class="hs-identifier">AttrFloat</span></a></a><span> </span><span class="hs-glyph">|</span><span> </span><a name="AttrBool"><a href="TensorFlow.OpGen.ParsedOp.html#AttrBool"><span class="hs-identifier">AttrBool</span></a></a><span>
</span><a name="line-102"></a><span>                </span><span class="hs-glyph">|</span><span> </span><a name="AttrType"><a href="TensorFlow.OpGen.ParsedOp.html#AttrType"><span class="hs-identifier">AttrType</span></a></a><span> </span><span class="hs-glyph">|</span><span> </span><a name="AttrShape"><a href="TensorFlow.OpGen.ParsedOp.html#AttrShape"><span class="hs-identifier">AttrShape</span></a></a><span> </span><span class="hs-glyph">|</span><span> </span><a name="AttrTensor"><a href="TensorFlow.OpGen.ParsedOp.html#AttrTensor"><span class="hs-identifier">AttrTensor</span></a></a><span>
</span><a name="line-103"></a><span>                </span><span class="hs-keyword">deriving</span><span> </span><span class="hs-identifier hs-type">Eq</span><span>
</span><a name="line-104"></a><span>
</span><a name="line-105"></a><span class="hs-keyword">data</span><span> </span><a name="TypeParam"><a href="TensorFlow.OpGen.ParsedOp.html#TypeParam"><span class="hs-identifier">TypeParam</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a name="TypeParam"><a href="TensorFlow.OpGen.ParsedOp.html#TypeParam"><span class="hs-identifier">TypeParam</span></a></a><span>
</span><a name="line-106"></a><span>    </span><span class="hs-special">{</span><span> </span><a name="typeParamIsList"><a href="TensorFlow.OpGen.ParsedOp.html#typeParamIsList"><span class="hs-identifier">typeParamIsList</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Bool</span><span>
</span><a name="line-107"></a><span>    </span><span class="hs-special">,</span><span> </span><a name="typeParamRestrictions"><a href="TensorFlow.OpGen.ParsedOp.html#typeParamRestrictions"><span class="hs-identifier">typeParamRestrictions</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Maybe</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">NonEmpty</span><span> </span><span class="hs-identifier hs-type">DataType</span><span class="hs-special">)</span><span>
</span><a name="line-108"></a><span>        </span><span class="hs-comment">-- ^ The list of allowed types (see: TensorFlow.Types.OneOf).</span><span>
</span><a name="line-109"></a><span>        </span><span class="hs-comment">-- If 'Nothing', then any type is acceptable.</span><span>
</span><a name="line-110"></a><span>    </span><span class="hs-special">}</span><span>
</span><a name="line-111"></a><span>
</span><a name="line-112"></a><span class="hs-comment">-- | An input or output argument (Tensor) for an op.</span><span>
</span><a name="line-113"></a><span class="hs-keyword">data</span><span> </span><a name="ParsedArg"><a href="TensorFlow.OpGen.ParsedOp.html#ParsedArg"><span class="hs-identifier">ParsedArg</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a name="ParsedArg"><a href="TensorFlow.OpGen.ParsedOp.html#ParsedArg"><span class="hs-identifier">ParsedArg</span></a></a><span>
</span><a name="line-114"></a><span>    </span><span class="hs-special">{</span><span> </span><a name="parsedArgName"><a href="TensorFlow.OpGen.ParsedOp.html#parsedArgName"><span class="hs-identifier">parsedArgName</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#Name"><span class="hs-identifier hs-type">Name</span></a><span>
</span><a name="line-115"></a><span>    </span><span class="hs-special">,</span><span> </span><a name="parsedArgDescription"><a href="TensorFlow.OpGen.ParsedOp.html#parsedArgDescription"><span class="hs-identifier">parsedArgDescription</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Text</span><span>
</span><a name="line-116"></a><span>    </span><span class="hs-special">,</span><span> </span><a name="parsedArgCase"><a href="TensorFlow.OpGen.ParsedOp.html#parsedArgCase"><span class="hs-identifier">parsedArgCase</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ParsedArgCase"><span class="hs-identifier hs-type">ParsedArgCase</span></a><span>
</span><a name="line-117"></a><span>    </span><span class="hs-special">}</span><span>
</span><a name="line-118"></a><span>
</span><a name="line-119"></a><span class="hs-keyword">data</span><span> </span><a name="ParsedArgCase"><a href="TensorFlow.OpGen.ParsedOp.html#ParsedArgCase"><span class="hs-identifier">ParsedArgCase</span></a></a><span>
</span><a name="line-120"></a><span>    </span><span class="hs-glyph">=</span><span> </span><a name="SimpleArg"><a href="TensorFlow.OpGen.ParsedOp.html#SimpleArg"><span class="hs-identifier">SimpleArg</span></a></a><span> </span><span class="hs-special">{</span><span> </span><a name="argType"><a href="TensorFlow.OpGen.ParsedOp.html#argType"><span class="hs-identifier">argType</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgType"><span class="hs-identifier hs-type">ArgType</span></a><span class="hs-special">,</span><span> </span><a name="argKind"><a href="TensorFlow.OpGen.ParsedOp.html#argKind"><span class="hs-identifier">argKind</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgKind"><span class="hs-identifier hs-type">ArgKind</span></a><span> </span><span class="hs-special">}</span><span>
</span><a name="line-121"></a><span>    </span><span class="hs-glyph">|</span><span> </span><a name="ListArg"><a href="TensorFlow.OpGen.ParsedOp.html#ListArg"><span class="hs-identifier">ListArg</span></a></a><span>
</span><a name="line-122"></a><span>        </span><span class="hs-special">{</span><span> </span><a name="argLength"><a href="TensorFlow.OpGen.ParsedOp.html#argLength"><span class="hs-identifier">argLength</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#Name"><span class="hs-identifier hs-type">Name</span></a><span>  </span><span class="hs-comment">-- ^ The attribute that specifies this list's length.</span><span>
</span><a name="line-123"></a><span>        </span><span class="hs-special">,</span><span> </span><a name="argType"><a href="TensorFlow.OpGen.ParsedOp.html#argType"><span class="hs-identifier">argType</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgType"><span class="hs-identifier hs-type">ArgType</span></a><span>
</span><a name="line-124"></a><span>        </span><span class="hs-special">,</span><span> </span><a name="argKind"><a href="TensorFlow.OpGen.ParsedOp.html#argKind"><span class="hs-identifier">argKind</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgKind"><span class="hs-identifier hs-type">ArgKind</span></a><span>
</span><a name="line-125"></a><span>        </span><span class="hs-special">}</span><span>
</span><a name="line-126"></a><span>    </span><span class="hs-glyph">|</span><span> </span><a name="MixedListArg"><a href="TensorFlow.OpGen.ParsedOp.html#MixedListArg"><span class="hs-identifier">MixedListArg</span></a></a><span> </span><span class="hs-special">{</span><span> </span><a name="argTypeAttr"><a href="TensorFlow.OpGen.ParsedOp.html#argTypeAttr"><span class="hs-identifier">argTypeAttr</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#Name"><span class="hs-identifier hs-type">Name</span></a><span class="hs-special">,</span><span> </span><a name="argKind"><a href="TensorFlow.OpGen.ParsedOp.html#argKind"><span class="hs-identifier">argKind</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgKind"><span class="hs-identifier hs-type">ArgKind</span></a><span> </span><span class="hs-special">}</span><span>
</span><a name="line-127"></a><span>        </span><span class="hs-comment">-- ^ A heterogeneous list.</span><span>
</span><a name="line-128"></a><span>
</span><a name="line-129"></a><span class="hs-identifier">maybeArgType</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ParsedArgCase"><span class="hs-identifier hs-type">ParsedArgCase</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Maybe</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgType"><span class="hs-identifier hs-type">ArgType</span></a><span>
</span><a name="line-130"></a><a name="maybeArgType"><a href="TensorFlow.OpGen.ParsedOp.html#maybeArgType"><span class="hs-identifier">maybeArgType</span></a></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#MixedListArg"><span class="hs-identifier hs-var">MixedListArg</span></a><span class="hs-special">{</span><span class="hs-special">}</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Nothing</span><span>
</span><a name="line-131"></a><span class="hs-identifier">maybeArgType</span><span> </span><a name="local-6989586621679036812"><a href="#local-6989586621679036812"><span class="hs-identifier">a</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Just</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier">argType</span><span> </span><a href="#local-6989586621679036812"><span class="hs-identifier hs-var">a</span></a><span>
</span><a name="line-132"></a><span>
</span><a name="line-133"></a><span class="hs-comment">-- | The type of an argument.</span><span>
</span><a name="line-134"></a><span class="hs-keyword">data</span><span> </span><a name="ArgType"><a href="TensorFlow.OpGen.ParsedOp.html#ArgType"><span class="hs-identifier">ArgType</span></a></a><span>
</span><a name="line-135"></a><span>    </span><span class="hs-glyph">=</span><span> </span><a name="ArgTypeFixed"><a href="TensorFlow.OpGen.ParsedOp.html#ArgTypeFixed"><span class="hs-identifier">ArgTypeFixed</span></a></a><span> </span><span class="hs-identifier hs-type">DataType</span><span> </span><span class="hs-comment">-- ^ A fixed type.</span><span>
</span><a name="line-136"></a><span>    </span><span class="hs-glyph">|</span><span> </span><a name="ArgTypeAttr"><a href="TensorFlow.OpGen.ParsedOp.html#ArgTypeAttr"><span class="hs-identifier">ArgTypeAttr</span></a></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#Name"><span class="hs-identifier hs-type">Name</span></a><span>  </span><span class="hs-comment">-- ^ A type that depends on an attribute.</span><span>
</span><a name="line-137"></a><span>
</span><a name="line-138"></a><span class="hs-comment">-- The kind of an op input or output (not including the argument type `a`).</span><span>
</span><a name="line-139"></a><span class="hs-keyword">data</span><span> </span><a name="ArgKind"><a href="TensorFlow.OpGen.ParsedOp.html#ArgKind"><span class="hs-identifier">ArgKind</span></a></a><span>
</span><a name="line-140"></a><span>    </span><span class="hs-glyph">=</span><span> </span><a name="ArgTensorRef"><a href="TensorFlow.OpGen.ParsedOp.html#ArgTensorRef"><span class="hs-identifier">ArgTensorRef</span></a></a><span> </span><span class="hs-comment">-- Tensor Ref a</span><span>
</span><a name="line-141"></a><span>    </span><span class="hs-glyph">|</span><span> </span><a name="ArgTensorValue"><a href="TensorFlow.OpGen.ParsedOp.html#ArgTensorValue"><span class="hs-identifier">ArgTensorValue</span></a></a><span> </span><span class="hs-comment">-- Tensor Value a</span><span>
</span><a name="line-142"></a><span>    </span><span class="hs-glyph">|</span><span> </span><a name="ArgTensorBuild"><a href="TensorFlow.OpGen.ParsedOp.html#ArgTensorBuild"><span class="hs-identifier">ArgTensorBuild</span></a></a><span> </span><span class="hs-comment">-- Tensor Build a</span><span>
</span><a name="line-143"></a><span>    </span><span class="hs-glyph">|</span><span> </span><a name="ArgSomeTensor"><a href="TensorFlow.OpGen.ParsedOp.html#ArgSomeTensor"><span class="hs-identifier">ArgSomeTensor</span></a></a><span> </span><span class="hs-identifier hs-type">Text</span><span> </span><span class="hs-comment">-- Tensor v a; the Text is the variable 'v'.</span><span>
</span><a name="line-144"></a><span>    </span><span class="hs-keyword">deriving</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Eq</span><span class="hs-special">)</span><span>
</span><a name="line-145"></a><span>
</span><a name="line-146"></a><span class="hs-identifier">isRefCase</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ParsedArgCase"><span class="hs-identifier hs-type">ParsedArgCase</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Bool</span><span>
</span><a name="line-147"></a><a name="isRefCase"><a href="TensorFlow.OpGen.ParsedOp.html#isRefCase"><span class="hs-identifier">isRefCase</span></a></a><span> </span><a name="local-6989586621679036813"><a href="#local-6989586621679036813"><span class="hs-identifier">a</span></a></a><span>
</span><a name="line-148"></a><span>    </span><span class="hs-glyph">|</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgTensorRef"><span class="hs-identifier hs-var">ArgTensorRef</span></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-identifier">argKind</span><span> </span><a href="#local-6989586621679036813"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">True</span><span>
</span><a name="line-149"></a><span>    </span><span class="hs-glyph">|</span><span> </span><span class="hs-identifier hs-var">Just</span><span> </span><span class="hs-special">(</span><a href="TensorFlow.OpGen.ParsedOp.html#ArgTypeFixed"><span class="hs-identifier hs-var">ArgTypeFixed</span></a><span> </span><span class="hs-identifier hs-var">DT_RESOURCE</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#maybeArgType"><span class="hs-identifier hs-var">maybeArgType</span></a><span> </span><a href="#local-6989586621679036813"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">True</span><span>
</span><a name="line-150"></a><span>    </span><span class="hs-glyph">|</span><span> </span><span class="hs-identifier hs-var">otherwise</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">False</span><span>
</span><a name="line-151"></a><span>
</span><a name="line-152"></a><span class="hs-identifier">makeName</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Text</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#Name"><span class="hs-identifier hs-type">Name</span></a><span>
</span><a name="line-153"></a><a name="makeName"><a href="TensorFlow.OpGen.ParsedOp.html#makeName"><span class="hs-identifier">makeName</span></a></a><span> </span><a name="local-6989586621679036814"><a href="#local-6989586621679036814"><span class="hs-identifier">n</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#Name"><span class="hs-identifier hs-var">Name</span></a><span>
</span><a name="line-154"></a><span>    </span><span class="hs-special">{</span><span> </span><span class="hs-identifier">haskellName</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#HaskellName"><span class="hs-identifier hs-var">HaskellName</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#fixReservedName"><span class="hs-identifier hs-var">fixReservedName</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#lowCase"><span class="hs-identifier hs-var">lowCase</span></a><span> </span><a href="#local-6989586621679036814"><span class="hs-identifier hs-var">n</span></a><span>
</span><a name="line-155"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier">tfName</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#TFName"><span class="hs-identifier hs-var">TFName</span></a><span> </span><a href="#local-6989586621679036814"><span class="hs-identifier hs-var">n</span></a><span>
</span><a name="line-156"></a><span>    </span><span class="hs-special">}</span><span>
</span><a name="line-157"></a><span>
</span><a name="line-158"></a><span class="hs-comment">-- | Change a name so it doesn't conflict with any Haskell keywords.</span><span>
</span><a name="line-159"></a><span class="hs-identifier">fixReservedName</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Text</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Text</span><span>
</span><a name="line-160"></a><a name="fixReservedName"><a href="TensorFlow.OpGen.ParsedOp.html#fixReservedName"><span class="hs-identifier">fixReservedName</span></a></a><span> </span><a name="local-6989586621679036815"><a href="#local-6989586621679036815"><span class="hs-identifier">n</span></a></a><span>
</span><a name="line-161"></a><span>    </span><span class="hs-glyph">|</span><span> </span><a href="#local-6989586621679036815"><span class="hs-identifier hs-var">n</span></a><span> </span><span class="hs-special">`</span><span class="hs-identifier hs-var">Set</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">member</span><span class="hs-special">`</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#reservedKeywords"><span class="hs-identifier hs-var">reservedKeywords</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679036815"><span class="hs-identifier hs-var">n</span></a><span> </span><span class="hs-operator hs-var">&lt;&gt;</span><span> </span><span class="hs-string">&quot;'&quot;</span><span>
</span><a name="line-162"></a><span>    </span><span class="hs-glyph">|</span><span> </span><span class="hs-identifier hs-var">otherwise</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679036815"><span class="hs-identifier hs-var">n</span></a><span>
</span><a name="line-163"></a><span>
</span><a name="line-164"></a><span class="hs-identifier">reservedKeywords</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Set</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">Set</span><span> </span><span class="hs-identifier hs-type">Text</span><span>
</span><a name="line-165"></a><a name="reservedKeywords"><a href="TensorFlow.OpGen.ParsedOp.html#reservedKeywords"><span class="hs-identifier">reservedKeywords</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Set</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">fromList</span><span> </span><span class="hs-operator hs-var">$</span><span>
</span><a name="line-166"></a><span>    </span><span class="hs-comment">-- Haskell2010 keywords:</span><span>
</span><a name="line-167"></a><span>    </span><span class="hs-comment">-- https://www.haskell.org/onlinereport/haskell2010/haskellch2.html#x7-180002.4</span><span>
</span><a name="line-168"></a><span>    </span><span class="hs-comment">-- We don't include keywords that are allowed to be variable names,</span><span>
</span><a name="line-169"></a><span>    </span><span class="hs-comment">-- in particular: &quot;as&quot;, &quot;forall&quot;, and &quot;hiding&quot;.</span><span>
</span><a name="line-170"></a><span>    </span><span class="hs-special">[</span><span> </span><span class="hs-string">&quot;case&quot;</span><span>
</span><a name="line-171"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;class&quot;</span><span>
</span><a name="line-172"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;data&quot;</span><span>
</span><a name="line-173"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;default&quot;</span><span>
</span><a name="line-174"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;deriving&quot;</span><span>
</span><a name="line-175"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;do&quot;</span><span>
</span><a name="line-176"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;else&quot;</span><span>
</span><a name="line-177"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;foreign&quot;</span><span>
</span><a name="line-178"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;if&quot;</span><span>
</span><a name="line-179"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;import&quot;</span><span>
</span><a name="line-180"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;in&quot;</span><span>
</span><a name="line-181"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;infix&quot;</span><span>
</span><a name="line-182"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;infixl&quot;</span><span>
</span><a name="line-183"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;infixr&quot;</span><span>
</span><a name="line-184"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;instance&quot;</span><span>
</span><a name="line-185"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;let&quot;</span><span>
</span><a name="line-186"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;module&quot;</span><span>
</span><a name="line-187"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;newtype&quot;</span><span>
</span><a name="line-188"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;of&quot;</span><span>
</span><a name="line-189"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;then&quot;</span><span>
</span><a name="line-190"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;type&quot;</span><span>
</span><a name="line-191"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;where&quot;</span><span>
</span><a name="line-192"></a><span>    </span><span class="hs-special">]</span><span>
</span><a name="line-193"></a><span>    </span><span class="hs-operator hs-var">++</span><span>  </span><span class="hs-comment">-- Nonstandard extensions</span><span>
</span><a name="line-194"></a><span>    </span><span class="hs-special">[</span><span> </span><span class="hs-string">&quot;mdo&quot;</span><span>   </span><span class="hs-comment">-- RecursiveDo</span><span>
</span><a name="line-195"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;rec&quot;</span><span>   </span><span class="hs-comment">-- Arrows, RecursiveDo</span><span>
</span><a name="line-196"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-string">&quot;proc&quot;</span><span>  </span><span class="hs-comment">-- Arrows</span><span>
</span><a name="line-197"></a><span>    </span><span class="hs-special">]</span><span>
</span><a name="line-198"></a><span>
</span><a name="line-199"></a><span class="hs-comment">-- | Lower-case the given text.</span><span>
</span><a name="line-200"></a><span class="hs-identifier">lowCase</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Text</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Text</span><span>
</span><a name="line-201"></a><a name="lowCase"><a href="TensorFlow.OpGen.ParsedOp.html#lowCase"><span class="hs-identifier">lowCase</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#forceCase"><span class="hs-identifier hs-var">forceCase</span></a><span> </span><span class="hs-identifier hs-var">toLower</span><span>
</span><a name="line-202"></a><span>
</span><a name="line-203"></a><span class="hs-identifier">forceCase</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Char</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Char</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Text</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Text</span><span>
</span><a name="line-204"></a><a name="forceCase"><a href="TensorFlow.OpGen.ParsedOp.html#forceCase"><span class="hs-identifier">forceCase</span></a></a><span> </span><a name="local-6989586621679037160"><a href="#local-6989586621679037160"><span class="hs-identifier">convert</span></a></a><span> </span><a name="local-6989586621679037161"><a href="#local-6989586621679037161"><span class="hs-identifier">s</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">maybe</span><span> </span><span class="hs-string">&quot;&quot;</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="hs-special">(</span><a name="local-6989586621679037162"><a href="#local-6989586621679037162"><span class="hs-identifier">c</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679037163"><a href="#local-6989586621679037163"><span class="hs-identifier">cs</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-var">Text</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">cons</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679037160"><span class="hs-identifier hs-var">convert</span></a><span> </span><a href="#local-6989586621679037162"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679037163"><span class="hs-identifier hs-var">cs</span></a><span class="hs-special">)</span><span>
</span><a name="line-205"></a><span>                      </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Text</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">uncons</span><span> </span><a href="#local-6989586621679037161"><span class="hs-identifier hs-var">s</span></a><span class="hs-special">)</span><span>
</span><a name="line-206"></a><span>
</span><a name="line-207"></a><span class="hs-identifier">camelCase</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Text</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Text</span><span>
</span><a name="line-208"></a><a name="camelCase"><a href="TensorFlow.OpGen.ParsedOp.html#camelCase"><span class="hs-identifier">camelCase</span></a></a><span> </span><a name="local-6989586621679037164"><a href="#local-6989586621679037164"><span class="hs-identifier">s</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Text</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">concat</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#upCase"><span class="hs-identifier hs-var">upCase</span></a><span>
</span><a name="line-209"></a><span>                          </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">Text</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">splitOn</span><span> </span><span class="hs-string">&quot;_&quot;</span><span> </span><a href="#local-6989586621679037164"><span class="hs-identifier hs-var">s</span></a><span>
</span><a name="line-210"></a><span>
</span><a name="line-211"></a><span class="hs-comment">-- | Upper-case the given text.</span><span>
</span><a name="line-212"></a><span class="hs-identifier">upCase</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Text</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Text</span><span>
</span><a name="line-213"></a><a name="upCase"><a href="TensorFlow.OpGen.ParsedOp.html#upCase"><span class="hs-identifier">upCase</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#forceCase"><span class="hs-identifier hs-var">forceCase</span></a><span> </span><span class="hs-identifier hs-var">toUpper</span><span>
</span><a name="line-214"></a><span>
</span><a name="line-215"></a><span>
</span><a name="line-216"></a><span class="hs-identifier">parseOp</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">OpDef</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ParsedOp"><span class="hs-identifier hs-type">ParsedOp</span></a><span>
</span><a name="line-217"></a><a name="parseOp"><a href="TensorFlow.OpGen.ParsedOp.html#parseOp"><span class="hs-identifier">parseOp</span></a></a><span> </span><a name="local-6989586621679037165"><a href="#local-6989586621679037165"><span class="hs-identifier">o</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ParsedOp"><span class="hs-identifier hs-var">ParsedOp</span></a><span>
</span><a name="line-218"></a><span>    </span><span class="hs-special">{</span><span> </span><a href="#local-6989586621679037167"><span class="hs-identifier hs-var">parsedOpName</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#makeName"><span class="hs-identifier hs-var">makeName</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="#local-6989586621679037165"><span class="hs-identifier hs-var">o</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">name</span><span>
</span><a name="line-219"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="#local-6989586621679037167"><span class="hs-identifier hs-var">parsedOpSummary</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679037165"><span class="hs-identifier hs-var">o</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">summary</span><span>
</span><a name="line-220"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="#local-6989586621679037167"><span class="hs-identifier hs-var">parsedOpDescription</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679037165"><span class="hs-identifier hs-var">o</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">description</span><span>
</span><a name="line-221"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-glyph">..</span><span>
</span><a name="line-222"></a><span>    </span><span class="hs-special">}</span><span>
</span><a name="line-223"></a><span>  </span><span class="hs-keyword">where</span><span>
</span><a name="line-224"></a><span>    </span><a name="local-6989586621679037166"><a href="#local-6989586621679037166"><span class="hs-identifier">parsedOpIsMonadic</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679037165"><span class="hs-identifier hs-var">o</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">isStateful</span><span>
</span><a name="line-225"></a><span>                    </span><span class="hs-operator hs-var">||</span><span> </span><span class="hs-identifier hs-var">any</span><span> </span><span class="hs-special">(</span><a href="TensorFlow.OpGen.ParsedOp.html#isRefCase"><span class="hs-identifier hs-var">isRefCase</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier">parsedArgCase</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679037167"><span class="hs-identifier hs-var">parsedInputs</span></a><span>
</span><a name="line-226"></a><span>                    </span><span class="hs-operator hs-var">||</span><span> </span><span class="hs-identifier hs-var">null</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679037165"><span class="hs-identifier hs-var">o</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">outputArg</span><span class="hs-special">)</span><span>
</span><a name="line-227"></a><span>    </span><a name="local-6989586621679037167"><a href="#local-6989586621679037167"><span class="hs-identifier">parsedInputs</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">zipWith</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><a name="local-6989586621679038363"><a href="#local-6989586621679038363"><span class="hs-identifier">t</span></a></a><span> </span><a name="local-6989586621679038364"><a href="#local-6989586621679038364"><span class="hs-identifier">a</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#parseArg"><span class="hs-identifier hs-var">parseArg</span></a><span> </span><a href="#local-6989586621679038364"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.OpGen.ParsedOp.html#inputTensorKind"><span class="hs-identifier hs-var">inputTensorKind</span></a><span> </span><a href="#local-6989586621679038363"><span class="hs-identifier hs-var">t</span></a><span> </span><a href="#local-6989586621679038364"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a name="line-228"></a><span>                                        </span><a href="#local-6989586621679037168"><span class="hs-identifier hs-var">tensorKindParams</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679037165"><span class="hs-identifier hs-var">o</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">inputArg</span><span class="hs-special">)</span><span> </span><span>
</span><a name="line-229"></a><span>    </span><a name="local-6989586621679037168"><a href="#local-6989586621679037168"><span class="hs-identifier">tensorKindParams</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span class="hs-string">&quot;v'&quot;</span><span> </span><span class="hs-operator hs-var">&lt;&gt;</span><span> </span><span class="hs-identifier hs-var">Text</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">pack</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">show</span><span> </span><a href="#local-6989586621679038810"><span class="hs-identifier hs-var">x</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">|</span><span> </span><a name="local-6989586621679038810"><a href="#local-6989586621679038810"><span class="hs-identifier">x</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-special">[</span><span class="hs-number">1</span><span class="hs-glyph">::</span><span class="hs-identifier hs-type">Integer</span><span> </span><span class="hs-glyph">..</span><span class="hs-special">]</span><span class="hs-special">]</span><span>
</span><a name="line-230"></a><span>    </span><a name="local-6989586621679037169"><a href="#local-6989586621679037169"><span class="hs-identifier">parsedOutputs</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><a name="local-6989586621679039478"><a href="#local-6989586621679039478"><span class="hs-identifier">a</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#parseArg"><span class="hs-identifier hs-var">parseArg</span></a><span> </span><a href="#local-6989586621679039478"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.OpGen.ParsedOp.html#outputTensorKind"><span class="hs-identifier hs-var">outputTensorKind</span></a><span> </span><a href="#local-6989586621679037166"><span class="hs-identifier hs-var">parsedOpIsMonadic</span></a><span> </span><a href="#local-6989586621679039478"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a name="line-231"></a><span>                        </span><span class="hs-special">(</span><a href="#local-6989586621679037165"><span class="hs-identifier hs-var">o</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">outputArg</span><span class="hs-special">)</span><span>
</span><a name="line-232"></a><span>    </span><span class="hs-comment">-- Integer attributes that can be inferred from the size of at least one</span><span>
</span><a name="line-233"></a><span>    </span><span class="hs-comment">-- input list.</span><span>
</span><a name="line-234"></a><span>    </span><a name="local-6989586621679037170"><a href="#local-6989586621679037170"><span class="hs-identifier">inferredListSizeAttrs</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#mapMaybeAttrs"><span class="hs-identifier hs-var">mapMaybeAttrs</span></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.OpGen.ParsedOp.html#getInferredListSizeAttr"><span class="hs-identifier hs-var">getInferredListSizeAttr</span></a><span> </span><a href="#local-6989586621679037167"><span class="hs-identifier hs-var">parsedInputs</span></a><span class="hs-special">)</span><span>
</span><a name="line-235"></a><span>                                </span><span class="hs-operator hs-var">$</span><span> </span><a href="#local-6989586621679037165"><span class="hs-identifier hs-var">o</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">attr</span><span>
</span><a name="line-236"></a><span>    </span><a name="local-6989586621679037171"><a href="#local-6989586621679037171"><span class="hs-identifier">implicitAttrs</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Set</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">fromList</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-identifier">tfName</span><span> </span><span class="hs-operator hs-var">$</span><span>
</span><a name="line-237"></a><span>                        </span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-identifier">attrName</span><span> </span><a href="#local-6989586621679037172"><span class="hs-identifier hs-var">inferredTypeAttrs</span></a><span>
</span><a name="line-238"></a><span>                            </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-identifier">attrName</span><span> </span><a href="#local-6989586621679037170"><span class="hs-identifier hs-var">inferredListSizeAttrs</span></a><span>
</span><a name="line-239"></a><span>    </span><a name="local-6989586621679037172"><a href="#local-6989586621679037172"><span class="hs-identifier">inferredTypeAttrs</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#mapMaybeAttrs"><span class="hs-identifier hs-var">mapMaybeAttrs</span></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.OpGen.ParsedOp.html#getInferredTypeAttr"><span class="hs-identifier hs-var">getInferredTypeAttr</span></a><span> </span><a href="#local-6989586621679037173"><span class="hs-identifier hs-var">argTypeParams</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="#local-6989586621679037165"><span class="hs-identifier hs-var">o</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">attr</span><span>
</span><a name="line-240"></a><span>    </span><a name="local-6989586621679037173"><a href="#local-6989586621679037173"><span class="hs-identifier">argTypeParams</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Set</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">fromList</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-identifier">tfName</span><span> </span><span class="hs-operator hs-var">$</span><span>
</span><a name="line-241"></a><span>                        </span><span class="hs-identifier hs-var">mapMaybe</span><span> </span><span class="hs-special">(</span><a href="TensorFlow.OpGen.ParsedOp.html#getArgTypeParam"><span class="hs-identifier hs-var">getArgTypeParam</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier">parsedArgCase</span><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">$</span><span>
</span><a name="line-242"></a><span>                            </span><a href="#local-6989586621679037167"><span class="hs-identifier hs-var">parsedInputs</span></a><span> </span><span class="hs-operator hs-var">++</span><span> </span><a href="#local-6989586621679037169"><span class="hs-identifier hs-var">parsedOutputs</span></a><span>
</span><a name="line-243"></a><span>    </span><span class="hs-comment">-- Attributes that can't be inferred and don't have defaults, so must be</span><span>
</span><a name="line-244"></a><span>    </span><span class="hs-comment">-- passed as separate arguments to the op.</span><span>
</span><a name="line-245"></a><span>    </span><a name="local-6989586621679037174"><a href="#local-6989586621679037174"><span class="hs-identifier">explicitInputAttrs</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">sortBy</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">comparing</span><span> </span><span class="hs-special">(</span><span class="hs-identifier">tfName</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier">attrName</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a name="line-246"></a><span>                        </span><span class="hs-operator hs-var">$</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#mapMaybeAttrs"><span class="hs-identifier hs-var">mapMaybeAttrs</span></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.OpGen.ParsedOp.html#getExplicitInputAttr"><span class="hs-identifier hs-var">getExplicitInputAttr</span></a><span> </span><a href="#local-6989586621679037165"><span class="hs-identifier hs-var">o</span></a><span> </span><a href="#local-6989586621679037171"><span class="hs-identifier hs-var">implicitAttrs</span></a><span class="hs-special">)</span><span>
</span><a name="line-247"></a><span>                        </span><span class="hs-operator hs-var">$</span><span> </span><a href="#local-6989586621679037165"><span class="hs-identifier hs-var">o</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">attr</span><span>
</span><a name="line-248"></a><span>
</span><a name="line-249"></a><span class="hs-comment">-- TODO(judahjacobson): Some arguments should be refs.</span><span>
</span><a name="line-250"></a><span class="hs-identifier">inputTensorKind</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Text</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">OpDef'ArgDef</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgKind"><span class="hs-identifier hs-type">ArgKind</span></a><span>
</span><a name="line-251"></a><a name="inputTensorKind"><a href="TensorFlow.OpGen.ParsedOp.html#inputTensorKind"><span class="hs-identifier">inputTensorKind</span></a></a><span> </span><a name="local-6989586621679039621"><a href="#local-6989586621679039621"><span class="hs-identifier">v</span></a></a><span> </span><a name="local-6989586621679039622"><a href="#local-6989586621679039622"><span class="hs-identifier">a</span></a></a><span>
</span><a name="line-252"></a><span>    </span><span class="hs-glyph">|</span><span> </span><a href="#local-6989586621679039622"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">isRef</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgTensorRef"><span class="hs-identifier hs-var">ArgTensorRef</span></a><span>
</span><a name="line-253"></a><span>    </span><span class="hs-glyph">|</span><span> </span><span class="hs-identifier hs-var">otherwise</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgSomeTensor"><span class="hs-identifier hs-var">ArgSomeTensor</span></a><span> </span><a href="#local-6989586621679039621"><span class="hs-identifier hs-var">v</span></a><span>
</span><a name="line-254"></a><span>
</span><a name="line-255"></a><span class="hs-identifier">outputTensorKind</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Bool</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">OpDef'ArgDef</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgKind"><span class="hs-identifier hs-type">ArgKind</span></a><span>
</span><a name="line-256"></a><a name="outputTensorKind"><a href="TensorFlow.OpGen.ParsedOp.html#outputTensorKind"><span class="hs-identifier">outputTensorKind</span></a></a><span> </span><a name="local-6989586621679039623"><a href="#local-6989586621679039623"><span class="hs-identifier">isMonadic</span></a></a><span> </span><a name="local-6989586621679039624"><a href="#local-6989586621679039624"><span class="hs-identifier">a</span></a></a><span>
</span><a name="line-257"></a><span>    </span><span class="hs-glyph">|</span><span> </span><a href="#local-6989586621679039624"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">isRef</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgTensorRef"><span class="hs-identifier hs-var">ArgTensorRef</span></a><span>
</span><a name="line-258"></a><span>    </span><span class="hs-glyph">|</span><span> </span><a href="#local-6989586621679039623"><span class="hs-identifier hs-var">isMonadic</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgTensorValue"><span class="hs-identifier hs-var">ArgTensorValue</span></a><span>
</span><a name="line-259"></a><span>    </span><span class="hs-glyph">|</span><span> </span><span class="hs-identifier hs-var">otherwise</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgTensorBuild"><span class="hs-identifier hs-var">ArgTensorBuild</span></a><span>
</span><a name="line-260"></a><span>
</span><a name="line-261"></a><span class="hs-identifier">getExplicitInputAttr</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">OpDef</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Set</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">Set</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#TFName"><span class="hs-identifier hs-type">TFName</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">OpDef'AttrDef</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Maybe</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrType"><span class="hs-identifier hs-type">AttrType</span></a><span>
</span><a name="line-262"></a><a name="getExplicitInputAttr"><a href="TensorFlow.OpGen.ParsedOp.html#getExplicitInputAttr"><span class="hs-identifier">getExplicitInputAttr</span></a></a><span> </span><a name="local-6989586621679039625"><a href="#local-6989586621679039625"><span class="hs-identifier">o</span></a></a><span> </span><a name="local-6989586621679039626"><a href="#local-6989586621679039626"><span class="hs-identifier">implicitAttrs</span></a></a><span> </span><a name="local-6989586621679039627"><a href="#local-6989586621679039627"><span class="hs-identifier">a</span></a></a><span>
</span><a name="line-263"></a><span>    </span><span class="hs-glyph">|</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#TFName"><span class="hs-identifier hs-var">TFName</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679039627"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">name</span><span class="hs-special">)</span><span> </span><span class="hs-special">`</span><span class="hs-identifier hs-var">Set</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">notMember</span><span class="hs-special">`</span><span> </span><a href="#local-6989586621679039626"><span class="hs-identifier hs-var">implicitAttrs</span></a><span>
</span><a name="line-264"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="#local-6989586621679039627"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">maybe'defaultValue</span><span> </span><span class="hs-operator hs-var">==</span><span> </span><span class="hs-identifier hs-var">Nothing</span><span>
</span><a name="line-265"></a><span>    </span><span class="hs-special">,</span><span> </span><a name="local-6989586621679039628"><a href="#local-6989586621679039628"><span class="hs-identifier">t</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#parseAttrType"><span class="hs-identifier hs-var">parseAttrType</span></a><span> </span><a href="#local-6989586621679039625"><span class="hs-identifier hs-var">o</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679039627"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">type'</span><span class="hs-special">)</span><span>
</span><a name="line-266"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="#local-6989586621679039628"><span class="hs-identifier hs-var">t</span></a><span> </span><span class="hs-special">`</span><span class="hs-identifier hs-var">elem</span><span class="hs-special">`</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrSingle"><span class="hs-identifier hs-var">AttrSingle</span></a><span>
</span><a name="line-267"></a><span>                    </span><span class="hs-special">[</span><a href="TensorFlow.OpGen.ParsedOp.html#AttrBool"><span class="hs-identifier hs-var">AttrBool</span></a><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrInt64"><span class="hs-identifier hs-var">AttrInt64</span></a><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrFloat"><span class="hs-identifier hs-var">AttrFloat</span></a><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrType"><span class="hs-identifier hs-var">AttrType</span></a><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrShape"><span class="hs-identifier hs-var">AttrShape</span></a><span class="hs-special">]</span><span>
</span><a name="line-268"></a><span>                </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-special">[</span><a href="TensorFlow.OpGen.ParsedOp.html#AttrList"><span class="hs-identifier hs-var">AttrList</span></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrType"><span class="hs-identifier hs-var">AttrType</span></a><span class="hs-special">]</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Just</span><span> </span><a href="#local-6989586621679039628"><span class="hs-identifier hs-var">t</span></a><span>
</span><a name="line-269"></a><span>    </span><span class="hs-glyph">|</span><span> </span><span class="hs-identifier hs-var">otherwise</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Nothing</span><span>
</span><a name="line-270"></a><span>
</span><a name="line-271"></a><span class="hs-identifier">getInferredTypeAttr</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Set</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">Set</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#TFName"><span class="hs-identifier hs-type">TFName</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">OpDef'AttrDef</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Maybe</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#TypeParam"><span class="hs-identifier hs-type">TypeParam</span></a><span>
</span><a name="line-272"></a><a name="getInferredTypeAttr"><a href="TensorFlow.OpGen.ParsedOp.html#getInferredTypeAttr"><span class="hs-identifier">getInferredTypeAttr</span></a></a><span> </span><a name="local-6989586621679039629"><a href="#local-6989586621679039629"><span class="hs-identifier">argTypeParams</span></a></a><span> </span><a name="local-6989586621679039630"><a href="#local-6989586621679039630"><span class="hs-identifier">a</span></a></a><span>
</span><a name="line-273"></a><span>    </span><span class="hs-glyph">|</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#TFName"><span class="hs-identifier hs-var">TFName</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679039630"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">name</span><span class="hs-special">)</span><span> </span><span class="hs-special">`</span><span class="hs-identifier hs-var">notElem</span><span class="hs-special">`</span><span> </span><a href="#local-6989586621679039629"><span class="hs-identifier hs-var">argTypeParams</span></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Nothing</span><span>
</span><a name="line-274"></a><span>    </span><span class="hs-glyph">|</span><span> </span><a href="#local-6989586621679039630"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">type'</span><span> </span><span class="hs-operator hs-var">==</span><span> </span><span class="hs-string">&quot;type&quot;</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Just</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#TypeParam"><span class="hs-identifier hs-var">TypeParam</span></a><span> </span><span class="hs-identifier hs-var">False</span><span> </span><a href="#local-6989586621679039631"><span class="hs-identifier hs-var">allowed</span></a><span>
</span><a name="line-275"></a><span>    </span><span class="hs-glyph">|</span><span> </span><a href="#local-6989586621679039630"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">type'</span><span> </span><span class="hs-operator hs-var">==</span><span> </span><span class="hs-string">&quot;list(type)&quot;</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Just</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#TypeParam"><span class="hs-identifier hs-var">TypeParam</span></a><span> </span><span class="hs-identifier hs-var">True</span><span> </span><a href="#local-6989586621679039631"><span class="hs-identifier hs-var">allowed</span></a><span>
</span><a name="line-276"></a><span>    </span><span class="hs-glyph">|</span><span> </span><span class="hs-identifier hs-var">otherwise</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Nothing</span><span>
</span><a name="line-277"></a><span>  </span><span class="hs-keyword">where</span><span>
</span><a name="line-278"></a><span>    </span><a name="local-6989586621679039631"><a href="#local-6989586621679039631"><span class="hs-identifier">allowed</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">nonEmpty</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679039630"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">allowedValues</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">list</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">type'</span><span class="hs-special">)</span><span>
</span><a name="line-279"></a><span>
</span><a name="line-280"></a><span class="hs-identifier">getArgTypeParam</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ParsedArgCase"><span class="hs-identifier hs-type">ParsedArgCase</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Maybe</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#Name"><span class="hs-identifier hs-type">Name</span></a><span>
</span><a name="line-281"></a><a name="getArgTypeParam"><a href="TensorFlow.OpGen.ParsedOp.html#getArgTypeParam"><span class="hs-identifier">getArgTypeParam</span></a></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#SimpleArg"><span class="hs-identifier hs-var">SimpleArg</span></a><span> </span><span class="hs-special">{</span><span> </span><span class="hs-identifier">argType</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgTypeAttr"><span class="hs-identifier hs-var">ArgTypeAttr</span></a><span> </span><a name="local-6989586621679039632"><a href="#local-6989586621679039632"><span class="hs-identifier">n</span></a></a><span class="hs-special">}</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Just</span><span> </span><a href="#local-6989586621679039632"><span class="hs-identifier hs-var">n</span></a><span>
</span><a name="line-282"></a><span class="hs-identifier">getArgTypeParam</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ListArg"><span class="hs-identifier hs-var">ListArg</span></a><span> </span><span class="hs-special">{</span><span> </span><span class="hs-identifier">argType</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgTypeAttr"><span class="hs-identifier hs-var">ArgTypeAttr</span></a><span> </span><a name="local-6989586621679039633"><a href="#local-6989586621679039633"><span class="hs-identifier">n</span></a></a><span class="hs-special">}</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Just</span><span> </span><a href="#local-6989586621679039633"><span class="hs-identifier hs-var">n</span></a><span>
</span><a name="line-283"></a><span class="hs-identifier">getArgTypeParam</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#MixedListArg"><span class="hs-identifier hs-var">MixedListArg</span></a><span> </span><span class="hs-special">{</span><span> </span><span class="hs-identifier">argTypeAttr</span><span> </span><span class="hs-glyph">=</span><span> </span><a name="local-6989586621679039634"><a href="#local-6989586621679039634"><span class="hs-identifier">n</span></a></a><span> </span><span class="hs-special">}</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Just</span><span> </span><a href="#local-6989586621679039634"><span class="hs-identifier hs-var">n</span></a><span>
</span><a name="line-284"></a><span class="hs-identifier">getArgTypeParam</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Nothing</span><span>
</span><a name="line-285"></a><span>
</span><a name="line-286"></a><span class="hs-identifier">getInferredListSizeAttr</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><a href="TensorFlow.OpGen.ParsedOp.html#ParsedArg"><span class="hs-identifier hs-type">ParsedArg</span></a><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">OpDef'AttrDef</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Maybe</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">NonEmpty</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#Name"><span class="hs-identifier hs-type">Name</span></a><span class="hs-special">)</span><span>
</span><a name="line-287"></a><a name="getInferredListSizeAttr"><a href="TensorFlow.OpGen.ParsedOp.html#getInferredListSizeAttr"><span class="hs-identifier">getInferredListSizeAttr</span></a></a><span> </span><a name="local-6989586621679039635"><a href="#local-6989586621679039635"><span class="hs-identifier">inputs</span></a></a><span> </span><a name="local-6989586621679039636"><a href="#local-6989586621679039636"><span class="hs-identifier">a</span></a></a><span>
</span><a name="line-288"></a><span>    </span><span class="hs-glyph">|</span><span> </span><a href="#local-6989586621679039636"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">type'</span><span> </span><span class="hs-operator hs-var">==</span><span> </span><span class="hs-string">&quot;int&quot;</span><span>
</span><a name="line-289"></a><span>        </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">nonEmpty</span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679039637"><span class="hs-identifier hs-var">t</span></a><span> </span><span class="hs-glyph">|</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ParsedArg"><span class="hs-identifier hs-var">ParsedArg</span></a><span> </span><span class="hs-special">{</span><span> </span><span class="hs-identifier">parsedArgName</span><span> </span><span class="hs-glyph">=</span><span> </span><a name="local-6989586621679039637"><a href="#local-6989586621679039637"><span class="hs-identifier">t</span></a></a><span>
</span><a name="line-290"></a><span>                                  </span><span class="hs-special">,</span><span> </span><span class="hs-identifier">parsedArgCase</span><span>
</span><a name="line-291"></a><span>                                        </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ListArg"><span class="hs-identifier hs-var">ListArg</span></a><span> </span><span class="hs-special">{</span><span> </span><span class="hs-identifier">argLength</span><span> </span><span class="hs-glyph">=</span><span> </span><a name="local-6989586621679039638"><a href="#local-6989586621679039638"><span class="hs-identifier">n</span></a></a><span> </span><span class="hs-special">}</span><span>
</span><a name="line-292"></a><span>                                  </span><span class="hs-special">}</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><a href="#local-6989586621679039635"><span class="hs-identifier hs-var">inputs</span></a><span>
</span><a name="line-293"></a><span>                      </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#TFName"><span class="hs-identifier hs-var">TFName</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679039636"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">name</span><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">==</span><span> </span><span class="hs-identifier">tfName</span><span> </span><a href="#local-6989586621679039638"><span class="hs-identifier hs-var">n</span></a><span class="hs-special">]</span><span>
</span><a name="line-294"></a><span>    </span><span class="hs-glyph">|</span><span> </span><span class="hs-identifier hs-var">otherwise</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Nothing</span><span>
</span><a name="line-295"></a><span>
</span><a name="line-296"></a><span class="hs-comment">-- | Like mapMaybe, but associates the attribute name/description with the given info.</span><span>
</span><a name="line-297"></a><span class="hs-identifier">mapMaybeAttrs</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">OpDef'AttrDef</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Maybe</span><span> </span><a href="#local-6989586621679036419"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="hs-identifier hs-type">OpDef'AttrDef</span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><a href="TensorFlow.OpGen.ParsedOp.html#Attr"><span class="hs-identifier hs-type">Attr</span></a><span> </span><a href="#local-6989586621679036419"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">]</span><span>
</span><a name="line-298"></a><a name="mapMaybeAttrs"><a href="TensorFlow.OpGen.ParsedOp.html#mapMaybeAttrs"><span class="hs-identifier">mapMaybeAttrs</span></a></a><span> </span><a name="local-6989586621679039639"><a href="#local-6989586621679039639"><span class="hs-identifier">f</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">mapMaybe</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-glyph">\</span><a name="local-6989586621679039640"><a href="#local-6989586621679039640"><span class="hs-identifier">a</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>
</span><a name="line-299"></a><span>                            </span><a name="local-6989586621679039641"><a href="#local-6989586621679039641"><span class="hs-identifier">x</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><a href="#local-6989586621679039639"><span class="hs-identifier hs-var">f</span></a><span> </span><a href="#local-6989586621679039640"><span class="hs-identifier hs-var">a</span></a><span>
</span><a name="line-300"></a><span>                            </span><span class="hs-identifier hs-var">Just</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#Attr"><span class="hs-identifier hs-var">Attr</span></a><span>
</span><a name="line-301"></a><span>                                </span><span class="hs-special">{</span><span> </span><span class="hs-identifier">attrName</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#makeName"><span class="hs-identifier hs-var">makeName</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679039640"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">name</span><span class="hs-special">)</span><span>
</span><a name="line-302"></a><span>                                </span><span class="hs-special">,</span><span> </span><span class="hs-identifier">attrDescription</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679039640"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">description</span><span>
</span><a name="line-303"></a><span>                                </span><span class="hs-special">,</span><span> </span><span class="hs-identifier">attrInfo</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679039641"><span class="hs-identifier hs-var">x</span></a><span>
</span><a name="line-304"></a><span>                                </span><span class="hs-special">}</span><span>
</span><a name="line-305"></a><span>
</span><a name="line-306"></a><span class="hs-identifier">parseArg</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">OpDef'ArgDef</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgKind"><span class="hs-identifier hs-type">ArgKind</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ParsedArg"><span class="hs-identifier hs-type">ParsedArg</span></a><span>
</span><a name="line-307"></a><a name="parseArg"><a href="TensorFlow.OpGen.ParsedOp.html#parseArg"><span class="hs-identifier">parseArg</span></a></a><span> </span><a name="local-6989586621679039642"><a href="#local-6989586621679039642"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679039643"><a href="#local-6989586621679039643"><span class="hs-identifier">tKind</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ParsedArg"><span class="hs-identifier hs-var">ParsedArg</span></a><span>
</span><a name="line-308"></a><span>    </span><span class="hs-special">{</span><span> </span><span class="hs-identifier">parsedArgName</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#makeName"><span class="hs-identifier hs-var">makeName</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679039642"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">name</span><span class="hs-special">)</span><span>
</span><a name="line-309"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier">parsedArgDescription</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679039642"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">description</span><span>
</span><a name="line-310"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier">parsedArgCase</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#parseArgCase"><span class="hs-identifier hs-var">parseArgCase</span></a><span> </span><a href="#local-6989586621679039642"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679039643"><span class="hs-identifier hs-var">tKind</span></a><span>
</span><a name="line-311"></a><span>    </span><span class="hs-special">}</span><span>
</span><a name="line-312"></a><span>
</span><a name="line-313"></a><span class="hs-identifier">parseArgCase</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">OpDef'ArgDef</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgKind"><span class="hs-identifier hs-type">ArgKind</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ParsedArgCase"><span class="hs-identifier hs-type">ParsedArgCase</span></a><span>
</span><a name="line-314"></a><a name="parseArgCase"><a href="TensorFlow.OpGen.ParsedOp.html#parseArgCase"><span class="hs-identifier">parseArgCase</span></a></a><span> </span><a name="local-6989586621679039644"><a href="#local-6989586621679039644"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679039645"><a href="#local-6989586621679039645"><span class="hs-identifier">tKind</span></a></a><span>
</span><a name="line-315"></a><span>    </span><span class="hs-glyph">|</span><span> </span><span class="hs-identifier hs-var">Just</span><span> </span><a name="local-6989586621679039650"><a href="#local-6989586621679039650"><span class="hs-identifier">n</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><a href="#local-6989586621679039647"><span class="hs-identifier hs-var">maybeAttr</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679039644"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">typeListAttr</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#MixedListArg"><span class="hs-identifier hs-var">MixedListArg</span></a><span> </span><a href="#local-6989586621679039650"><span class="hs-identifier hs-var">n</span></a><span> </span><a href="#local-6989586621679039645"><span class="hs-identifier hs-var">tKind</span></a><span>
</span><a name="line-316"></a><span>    </span><span class="hs-glyph">|</span><span> </span><span class="hs-identifier hs-var">Just</span><span> </span><a name="local-6989586621679039651"><a href="#local-6989586621679039651"><span class="hs-identifier">n</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><a href="#local-6989586621679039647"><span class="hs-identifier hs-var">maybeAttr</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679039644"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">numberAttr</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ListArg"><span class="hs-identifier hs-var">ListArg</span></a><span> </span><a href="#local-6989586621679039651"><span class="hs-identifier hs-var">n</span></a><span> </span><a href="#local-6989586621679039646"><span class="hs-identifier hs-var">thisArgType</span></a><span> </span><a href="#local-6989586621679039645"><span class="hs-identifier hs-var">tKind</span></a><span>
</span><a name="line-317"></a><span>    </span><span class="hs-glyph">|</span><span> </span><span class="hs-identifier hs-var">otherwise</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#SimpleArg"><span class="hs-identifier hs-var">SimpleArg</span></a><span> </span><a href="#local-6989586621679039646"><span class="hs-identifier hs-var">thisArgType</span></a><span> </span><a href="#local-6989586621679039645"><span class="hs-identifier hs-var">tKind</span></a><span>
</span><a name="line-318"></a><span>  </span><span class="hs-keyword">where</span><span>
</span><a name="line-319"></a><span>    </span><a name="local-6989586621679039646"><a href="#local-6989586621679039646"><span class="hs-identifier">thisArgType</span></a></a><span>
</span><a name="line-320"></a><span>        </span><span class="hs-glyph">|</span><span> </span><span class="hs-identifier hs-var">Just</span><span> </span><a name="local-6989586621679039648"><a href="#local-6989586621679039648"><span class="hs-identifier">n</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><a href="#local-6989586621679039647"><span class="hs-identifier hs-var">maybeAttr</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679039644"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">typeAttr</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgTypeAttr"><span class="hs-identifier hs-var">ArgTypeAttr</span></a><span> </span><a href="#local-6989586621679039648"><span class="hs-identifier hs-var">n</span></a><span>
</span><a name="line-321"></a><span>        </span><span class="hs-glyph">|</span><span> </span><span class="hs-identifier hs-var">otherwise</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#ArgTypeFixed"><span class="hs-identifier hs-var">ArgTypeFixed</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679039644"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">type'</span><span class="hs-special">)</span><span>
</span><a name="line-322"></a><span>    </span><span class="hs-identifier">maybeAttr</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Text</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Maybe</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#Name"><span class="hs-identifier hs-type">Name</span></a><span>
</span><a name="line-323"></a><span>    </span><a name="local-6989586621679039647"><a href="#local-6989586621679039647"><span class="hs-identifier">maybeAttr</span></a></a><span> </span><span class="hs-string">&quot;&quot;</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Nothing</span><span>
</span><a name="line-324"></a><span>    </span><span class="hs-identifier">maybeAttr</span><span> </span><a name="local-6989586621679039649"><a href="#local-6989586621679039649"><span class="hs-identifier">t</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Just</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#makeName"><span class="hs-identifier hs-var">makeName</span></a><span> </span><a href="#local-6989586621679039649"><span class="hs-identifier hs-var">t</span></a><span>
</span><a name="line-325"></a><span>
</span><a name="line-326"></a><span class="hs-identifier">parseAttrType</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">OpDef</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Text</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrType"><span class="hs-identifier hs-type">AttrType</span></a><span>
</span><a name="line-327"></a><a name="parseAttrType"><a href="TensorFlow.OpGen.ParsedOp.html#parseAttrType"><span class="hs-identifier">parseAttrType</span></a></a><span> </span><a name="local-6989586621679039652"><a href="#local-6989586621679039652"><span class="hs-identifier">o</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-glyph">\</span><span class="hs-keyword">case</span><span>
</span><a name="line-328"></a><span>    </span><span class="hs-string">&quot;string&quot;</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrSingle"><span class="hs-identifier hs-var">AttrSingle</span></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrBytes"><span class="hs-identifier hs-var">AttrBytes</span></a><span>
</span><a name="line-329"></a><span>    </span><span class="hs-string">&quot;int&quot;</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrSingle"><span class="hs-identifier hs-var">AttrSingle</span></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrInt64"><span class="hs-identifier hs-var">AttrInt64</span></a><span>
</span><a name="line-330"></a><span>    </span><span class="hs-string">&quot;float&quot;</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrSingle"><span class="hs-identifier hs-var">AttrSingle</span></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrFloat"><span class="hs-identifier hs-var">AttrFloat</span></a><span>
</span><a name="line-331"></a><span>    </span><span class="hs-string">&quot;bool&quot;</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrSingle"><span class="hs-identifier hs-var">AttrSingle</span></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrBool"><span class="hs-identifier hs-var">AttrBool</span></a><span>
</span><a name="line-332"></a><span>    </span><span class="hs-string">&quot;type&quot;</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrSingle"><span class="hs-identifier hs-var">AttrSingle</span></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrType"><span class="hs-identifier hs-var">AttrType</span></a><span>
</span><a name="line-333"></a><span>    </span><span class="hs-string">&quot;shape&quot;</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrSingle"><span class="hs-identifier hs-var">AttrSingle</span></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrShape"><span class="hs-identifier hs-var">AttrShape</span></a><span>
</span><a name="line-334"></a><span>    </span><span class="hs-string">&quot;tensor&quot;</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrSingle"><span class="hs-identifier hs-var">AttrSingle</span></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrTensor"><span class="hs-identifier hs-var">AttrTensor</span></a><span>
</span><a name="line-335"></a><span>    </span><span class="hs-string">&quot;list(string)&quot;</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrList"><span class="hs-identifier hs-var">AttrList</span></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrBytes"><span class="hs-identifier hs-var">AttrBytes</span></a><span>
</span><a name="line-336"></a><span>    </span><span class="hs-string">&quot;list(int)&quot;</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrList"><span class="hs-identifier hs-var">AttrList</span></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrInt64"><span class="hs-identifier hs-var">AttrInt64</span></a><span>
</span><a name="line-337"></a><span>    </span><span class="hs-string">&quot;list(float)&quot;</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrList"><span class="hs-identifier hs-var">AttrList</span></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrFloat"><span class="hs-identifier hs-var">AttrFloat</span></a><span>
</span><a name="line-338"></a><span>    </span><span class="hs-string">&quot;list(bool)&quot;</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrList"><span class="hs-identifier hs-var">AttrList</span></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrBool"><span class="hs-identifier hs-var">AttrBool</span></a><span>
</span><a name="line-339"></a><span>    </span><span class="hs-string">&quot;list(type)&quot;</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrList"><span class="hs-identifier hs-var">AttrList</span></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrType"><span class="hs-identifier hs-var">AttrType</span></a><span>
</span><a name="line-340"></a><span>    </span><span class="hs-string">&quot;list(shape)&quot;</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrList"><span class="hs-identifier hs-var">AttrList</span></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrShape"><span class="hs-identifier hs-var">AttrShape</span></a><span>
</span><a name="line-341"></a><span>    </span><span class="hs-string">&quot;list(tensor)&quot;</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrList"><span class="hs-identifier hs-var">AttrList</span></a><span> </span><a href="TensorFlow.OpGen.ParsedOp.html#AttrTensor"><span class="hs-identifier hs-var">AttrTensor</span></a><span>
</span><a name="line-342"></a><span>    </span><a name="local-6989586621679039653"><a href="#local-6989586621679039653"><span class="hs-identifier">t</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-var">error</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-string">&quot;parseAttrType: unrecognized type &quot;</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-identifier hs-var">show</span><span> </span><a href="#local-6989586621679039653"><span class="hs-identifier hs-var">t</span></a><span>
</span><a name="line-343"></a><span>              </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-string">&quot; for op &quot;</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-identifier hs-var">show</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679039652"><span class="hs-identifier hs-var">o</span></a><span> </span><span class="hs-operator hs-var">^.</span><span> </span><span class="hs-identifier hs-var">name</span><span class="hs-special">)</span><span>
</span><a name="line-344"></a></pre></body></html>