This file is indexed.

/usr/share/doc/libghc-relational-query-doc/html/src/Database-Relational-Query-Monad-Trans-Aggregating.html is in libghc-relational-query-doc 0.9.5.1-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
<title>src/Database/Relational/Query/Monad/Trans/Aggregating.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE GeneralizedNewtypeDeriving #-}</span>
<a name="line-2"></a><span class='hs-comment'>{-# LANGUAGE FlexibleInstances #-}</span>
<a name="line-3"></a><span class='hs-comment'>{-# LANGUAGE MultiParamTypeClasses #-}</span>
<a name="line-4"></a>
<a name="line-5"></a><span class='hs-comment'>-- |</span>
<a name="line-6"></a><span class='hs-comment'>-- Module      : Database.Relational.Query.Monad.Trans.Aggregating</span>
<a name="line-7"></a><span class='hs-comment'>-- Copyright   : 2013-2017 Kei Hibino</span>
<a name="line-8"></a><span class='hs-comment'>-- License     : BSD3</span>
<a name="line-9"></a><span class='hs-comment'>--</span>
<a name="line-10"></a><span class='hs-comment'>-- Maintainer  : ex8k.hibino@gmail.com</span>
<a name="line-11"></a><span class='hs-comment'>-- Stability   : experimental</span>
<a name="line-12"></a><span class='hs-comment'>-- Portability : unknown</span>
<a name="line-13"></a><span class='hs-comment'>--</span>
<a name="line-14"></a><span class='hs-comment'>-- This module defines monad transformer which lift</span>
<a name="line-15"></a><span class='hs-comment'>-- from 'MonadQuery' into Aggregated query.</span>
<a name="line-16"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>Relational</span><span class='hs-varop'>.</span><span class='hs-conid'>Query</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Aggregating</span>
<a name="line-17"></a>       <span class='hs-layout'>(</span> <span class='hs-comment'>-- * Transformer into aggregated query</span>
<a name="line-18"></a>         <span class='hs-conid'>Aggregatings</span><span class='hs-layout'>,</span> <span class='hs-varid'>aggregatings</span><span class='hs-layout'>,</span>
<a name="line-19"></a>
<a name="line-20"></a>         <span class='hs-conid'>AggregatingSetT</span><span class='hs-layout'>,</span> <span class='hs-conid'>AggregatingSetListT</span><span class='hs-layout'>,</span> <span class='hs-conid'>AggregatingPowerSetT</span><span class='hs-layout'>,</span> <span class='hs-conid'>PartitioningSetT</span><span class='hs-layout'>,</span>
<a name="line-21"></a>
<a name="line-22"></a>         <span class='hs-comment'>-- * Result</span>
<a name="line-23"></a>         <span class='hs-varid'>extractAggregateTerms</span><span class='hs-layout'>,</span>
<a name="line-24"></a>
<a name="line-25"></a>         <span class='hs-comment'>-- * Grouping sets support</span>
<a name="line-26"></a>         <span class='hs-conid'>AggregatingSet</span><span class='hs-layout'>,</span> <span class='hs-conid'>AggregatingPowerSet</span><span class='hs-layout'>,</span>  <span class='hs-conid'>AggregatingSetList</span><span class='hs-layout'>,</span> <span class='hs-conid'>PartitioningSet</span><span class='hs-layout'>,</span>
<a name="line-27"></a>         <span class='hs-varid'>key</span><span class='hs-layout'>,</span> <span class='hs-varid'>key'</span><span class='hs-layout'>,</span> <span class='hs-varid'>set</span><span class='hs-layout'>,</span>
<a name="line-28"></a>         <span class='hs-varid'>bkey</span><span class='hs-layout'>,</span> <span class='hs-varid'>rollup</span><span class='hs-layout'>,</span> <span class='hs-varid'>cube</span><span class='hs-layout'>,</span> <span class='hs-varid'>groupingSets</span><span class='hs-layout'>,</span>
<a name="line-29"></a>       <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-30"></a>
<a name="line-31"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Class</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadTrans</span> <span class='hs-layout'>(</span><span class='hs-varid'>lift</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Writer</span> <span class='hs-layout'>(</span><span class='hs-conid'>WriterT</span><span class='hs-layout'>,</span> <span class='hs-varid'>runWriterT</span><span class='hs-layout'>,</span> <span class='hs-varid'>tell</span><span class='hs-layout'>)</span>
<a name="line-33"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Applicative</span> <span class='hs-layout'>(</span><span class='hs-conid'>Applicative</span><span class='hs-layout'>,</span> <span class='hs-varid'>pure</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>&lt;$&gt;</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-34"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Arrow</span> <span class='hs-layout'>(</span><span class='hs-varid'>second</span><span class='hs-layout'>)</span>
<a name="line-35"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>DList</span> <span class='hs-layout'>(</span><span class='hs-conid'>DList</span><span class='hs-layout'>,</span> <span class='hs-varid'>toList</span><span class='hs-layout'>)</span>
<a name="line-36"></a>
<a name="line-37"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Functor</span><span class='hs-varop'>.</span><span class='hs-conid'>Identity</span> <span class='hs-layout'>(</span><span class='hs-conid'>Identity</span> <span class='hs-layout'>(</span><span class='hs-varid'>runIdentity</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-38"></a>
<a name="line-39"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>Relational</span><span class='hs-varop'>.</span><span class='hs-conid'>Query</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span><span class='hs-varop'>.</span><span class='hs-conid'>GroupingSQL</span>
<a name="line-40"></a>  <span class='hs-layout'>(</span><span class='hs-conid'>AggregateColumnRef</span><span class='hs-layout'>,</span> <span class='hs-conid'>AggregateElem</span><span class='hs-layout'>,</span> <span class='hs-varid'>aggregateColumnRef</span><span class='hs-layout'>,</span> <span class='hs-conid'>AggregateSet</span><span class='hs-layout'>,</span> <span class='hs-varid'>aggregateGroupingSet</span><span class='hs-layout'>,</span>
<a name="line-41"></a>   <span class='hs-conid'>AggregateBitKey</span><span class='hs-layout'>,</span> <span class='hs-varid'>aggregatePowerKey</span><span class='hs-layout'>,</span> <span class='hs-varid'>aggregateRollup</span><span class='hs-layout'>,</span> <span class='hs-varid'>aggregateCube</span><span class='hs-layout'>,</span> <span class='hs-varid'>aggregateSets</span><span class='hs-layout'>,</span>
<a name="line-42"></a>   <span class='hs-conid'>AggregateKey</span><span class='hs-layout'>,</span> <span class='hs-varid'>aggregateKeyProjection</span><span class='hs-layout'>,</span> <span class='hs-varid'>aggregateKeyElement</span><span class='hs-layout'>,</span> <span class='hs-varid'>unsafeAggregateKey</span><span class='hs-layout'>)</span>
<a name="line-43"></a>
<a name="line-44"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>Relational</span><span class='hs-varop'>.</span><span class='hs-conid'>Query</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-layout'>(</span><span class='hs-conid'>Flat</span><span class='hs-layout'>,</span> <span class='hs-conid'>Aggregated</span><span class='hs-layout'>,</span> <span class='hs-conid'>Set</span><span class='hs-layout'>,</span> <span class='hs-conid'>Power</span><span class='hs-layout'>,</span> <span class='hs-conid'>SetList</span><span class='hs-layout'>)</span>
<a name="line-45"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>Relational</span><span class='hs-varop'>.</span><span class='hs-conid'>Query</span><span class='hs-varop'>.</span><span class='hs-conid'>Projection</span> <span class='hs-layout'>(</span><span class='hs-conid'>Projection</span><span class='hs-layout'>)</span>
<a name="line-46"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>Relational</span><span class='hs-varop'>.</span><span class='hs-conid'>Query</span><span class='hs-varop'>.</span><span class='hs-conid'>Projection</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Projection</span>
<a name="line-47"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>Relational</span><span class='hs-varop'>.</span><span class='hs-conid'>Query</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Class</span>
<a name="line-48"></a>  <span class='hs-layout'>(</span><span class='hs-conid'>MonadQualify</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>MonadRestrict</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>MonadQuery</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>MonadAggregate</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>MonadPartition</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-49"></a>
<a name="line-50"></a>
<a name="line-51"></a><a name="Aggregatings"></a><span class='hs-comment'>-- | Type to accumulate aggregating context.</span>
<a name="line-52"></a><a name="Aggregatings"></a><span class='hs-comment'>--   Type 'ac' is aggregating-context type like aggregating key set building,</span>
<a name="line-53"></a><a name="Aggregatings"></a><span class='hs-comment'>--   aggregating key sets set building and partition key set building.</span>
<a name="line-54"></a><a name="Aggregatings"></a><span class='hs-comment'>--   Type 'at' is aggregating term type.</span>
<a name="line-55"></a><a name="Aggregatings"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Aggregatings</span> <span class='hs-varid'>ac</span> <span class='hs-varid'>at</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span>
<a name="line-56"></a>  <span class='hs-conid'>Aggregatings</span> <span class='hs-layout'>(</span><span class='hs-conid'>WriterT</span> <span class='hs-layout'>(</span><span class='hs-conid'>DList</span> <span class='hs-varid'>at</span><span class='hs-layout'>)</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-57"></a>  <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadTrans</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monad</span><span class='hs-layout'>,</span> <span class='hs-conid'>Functor</span><span class='hs-layout'>,</span> <span class='hs-conid'>Applicative</span><span class='hs-layout'>)</span>
<a name="line-58"></a>
<a name="line-59"></a><a name="aggregatings"></a><span class='hs-comment'>-- | Lift to 'Aggregatings'.</span>
<a name="line-60"></a><span class='hs-definition'>aggregatings</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Aggregatings</span> <span class='hs-varid'>ac</span> <span class='hs-varid'>at</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-61"></a><span class='hs-definition'>aggregatings</span> <span class='hs-keyglyph'>=</span>  <span class='hs-varid'>lift</span>
<a name="line-62"></a>
<a name="line-63"></a><a name="AggregatingSetT"></a><span class='hs-comment'>-- | Context type building one grouping set.</span>
<a name="line-64"></a><a name="AggregatingSetT"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>AggregatingSetT</span>      <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Aggregatings</span> <span class='hs-conid'>Set</span>       <span class='hs-conid'>AggregateElem</span>
<a name="line-65"></a>
<a name="line-66"></a><a name="AggregatingSetListT"></a><span class='hs-comment'>-- | Context type building grouping sets list.</span>
<a name="line-67"></a><a name="AggregatingSetListT"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>AggregatingSetListT</span>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Aggregatings</span> <span class='hs-conid'>SetList</span>   <span class='hs-conid'>AggregateSet</span>
<a name="line-68"></a>
<a name="line-69"></a><a name="AggregatingPowerSetT"></a><span class='hs-comment'>-- | Context type building power group set.</span>
<a name="line-70"></a><a name="AggregatingPowerSetT"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>AggregatingPowerSetT</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Aggregatings</span> <span class='hs-conid'>Power</span>     <span class='hs-conid'>AggregateBitKey</span>
<a name="line-71"></a>
<a name="line-72"></a><a name="PartitioningSetT"></a><span class='hs-comment'>-- | Context type building partition keys set.</span>
<a name="line-73"></a><a name="PartitioningSetT"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>PartitioningSetT</span> <span class='hs-varid'>c</span>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Aggregatings</span> <span class='hs-varid'>c</span>         <span class='hs-conid'>AggregateColumnRef</span>
<a name="line-74"></a>
<a name="line-75"></a><a name="instance%20MonadRestrict%20c%20(AggregatingSetT%20m)"></a><span class='hs-comment'>-- | Aggregated 'MonadRestrict'.</span>
<a name="line-76"></a><a name="instance%20MonadRestrict%20c%20(AggregatingSetT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadRestrict</span> <span class='hs-varid'>c</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadRestrict</span> <span class='hs-varid'>c</span> <span class='hs-layout'>(</span><span class='hs-conid'>AggregatingSetT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-77"></a>  <span class='hs-varid'>restrict</span> <span class='hs-keyglyph'>=</span>  <span class='hs-varid'>aggregatings</span> <span class='hs-varop'>.</span> <span class='hs-varid'>restrict</span>
<a name="line-78"></a>
<a name="line-79"></a><a name="instance%20MonadQualify%20q%20(AggregatingSetT%20m)"></a><span class='hs-comment'>-- | Aggregated 'MonadQualify'.</span>
<a name="line-80"></a><a name="instance%20MonadQualify%20q%20(AggregatingSetT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadQualify</span> <span class='hs-varid'>q</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadQualify</span> <span class='hs-varid'>q</span> <span class='hs-layout'>(</span><span class='hs-conid'>AggregatingSetT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-81"></a>  <span class='hs-varid'>liftQualify</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>aggregatings</span> <span class='hs-varop'>.</span> <span class='hs-varid'>liftQualify</span>
<a name="line-82"></a>
<a name="line-83"></a><a name="instance%20MonadQuery%20(AggregatingSetT%20m)"></a><span class='hs-comment'>-- | Aggregated 'MonadQuery'.</span>
<a name="line-84"></a><a name="instance%20MonadQuery%20(AggregatingSetT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadQuery</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadQuery</span> <span class='hs-layout'>(</span><span class='hs-conid'>AggregatingSetT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-85"></a>  <span class='hs-varid'>setDuplication</span>     <span class='hs-keyglyph'>=</span> <span class='hs-varid'>aggregatings</span> <span class='hs-varop'>.</span> <span class='hs-varid'>setDuplication</span>
<a name="line-86"></a>  <span class='hs-varid'>restrictJoin</span>       <span class='hs-keyglyph'>=</span> <span class='hs-varid'>aggregatings</span> <span class='hs-varop'>.</span> <span class='hs-varid'>restrictJoin</span>
<a name="line-87"></a>  <span class='hs-varid'>query'</span>             <span class='hs-keyglyph'>=</span> <span class='hs-varid'>aggregatings</span> <span class='hs-varop'>.</span> <span class='hs-varid'>query'</span>
<a name="line-88"></a>  <span class='hs-varid'>queryMaybe'</span>        <span class='hs-keyglyph'>=</span> <span class='hs-varid'>aggregatings</span> <span class='hs-varop'>.</span> <span class='hs-varid'>queryMaybe'</span>
<a name="line-89"></a>
<a name="line-90"></a><a name="unsafeAggregateWithTerm"></a><span class='hs-definition'>unsafeAggregateWithTerm</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>at</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Aggregatings</span> <span class='hs-varid'>ac</span> <span class='hs-varid'>at</span> <span class='hs-varid'>m</span> <span class='hs-conid'>()</span>
<a name="line-91"></a><span class='hs-definition'>unsafeAggregateWithTerm</span> <span class='hs-keyglyph'>=</span>  <span class='hs-conid'>Aggregatings</span> <span class='hs-varop'>.</span> <span class='hs-varid'>tell</span> <span class='hs-varop'>.</span> <span class='hs-varid'>pure</span>
<a name="line-92"></a>
<a name="line-93"></a><a name="aggregateKey"></a><span class='hs-definition'>aggregateKey</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>AggregateKey</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Aggregatings</span> <span class='hs-varid'>ac</span> <span class='hs-conid'>AggregateElem</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-94"></a><span class='hs-definition'>aggregateKey</span> <span class='hs-varid'>k</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-95"></a>  <span class='hs-varid'>unsafeAggregateWithTerm</span> <span class='hs-varop'>$</span> <span class='hs-varid'>aggregateKeyElement</span> <span class='hs-varid'>k</span>
<a name="line-96"></a>  <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-varid'>aggregateKeyProjection</span> <span class='hs-varid'>k</span>
<a name="line-97"></a>
<a name="line-98"></a><a name="instance%20MonadAggregate%20(AggregatingSetT%20m)"></a><span class='hs-comment'>-- | Aggregated query instance.</span>
<a name="line-99"></a><a name="instance%20MonadAggregate%20(AggregatingSetT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadQuery</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadAggregate</span> <span class='hs-layout'>(</span><span class='hs-conid'>AggregatingSetT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-100"></a>  <span class='hs-varid'>groupBy</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-101"></a>    <span class='hs-varid'>mapM_</span> <span class='hs-varid'>unsafeAggregateWithTerm</span> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>aggregateColumnRef</span> <span class='hs-varid'>col</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>col</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-conid'>Projection</span><span class='hs-varop'>.</span><span class='hs-varid'>columns</span> <span class='hs-varid'>p</span><span class='hs-keyglyph'>]</span>
<a name="line-102"></a>    <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Projection</span><span class='hs-varop'>.</span><span class='hs-varid'>unsafeToAggregated</span> <span class='hs-varid'>p</span>
<a name="line-103"></a>  <span class='hs-varid'>groupBy'</span>  <span class='hs-keyglyph'>=</span> <span class='hs-varid'>aggregateKey</span>
<a name="line-104"></a>
<a name="line-105"></a><a name="instance%20MonadPartition%20c%20(PartitioningSetT%20c%20m)"></a><span class='hs-comment'>-- | Partition clause instance</span>
<a name="line-106"></a><a name="instance%20MonadPartition%20c%20(PartitioningSetT%20c%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadPartition</span> <span class='hs-varid'>c</span> <span class='hs-layout'>(</span><span class='hs-conid'>PartitioningSetT</span> <span class='hs-varid'>c</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-107"></a>  <span class='hs-varid'>partitionBy</span> <span class='hs-keyglyph'>=</span>  <span class='hs-varid'>mapM_</span> <span class='hs-varid'>unsafeAggregateWithTerm</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Projection</span><span class='hs-varop'>.</span><span class='hs-varid'>columns</span>
<a name="line-108"></a>
<a name="line-109"></a><a name="extractAggregateTerms"></a><span class='hs-comment'>-- | Run 'Aggregatings' to get terms list.</span>
<a name="line-110"></a><span class='hs-definition'>extractAggregateTerms</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Functor</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>Aggregatings</span> <span class='hs-varid'>ac</span> <span class='hs-varid'>at</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>at</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-111"></a><span class='hs-definition'>extractAggregateTerms</span> <span class='hs-layout'>(</span><span class='hs-conid'>Aggregatings</span> <span class='hs-varid'>ac</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>second</span> <span class='hs-varid'>toList</span> <span class='hs-varop'>&lt;$&gt;</span> <span class='hs-varid'>runWriterT</span> <span class='hs-varid'>ac</span>
<a name="line-112"></a>
<a name="line-113"></a><a name="extractTermList"></a><span class='hs-definition'>extractTermList</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Aggregatings</span> <span class='hs-varid'>ac</span> <span class='hs-varid'>at</span> <span class='hs-conid'>Identity</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>at</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-114"></a><span class='hs-definition'>extractTermList</span> <span class='hs-keyglyph'>=</span>  <span class='hs-varid'>runIdentity</span> <span class='hs-varop'>.</span> <span class='hs-varid'>extractAggregateTerms</span>
<a name="line-115"></a>
<a name="line-116"></a><a name="AggregatingSet"></a><span class='hs-comment'>-- | Context monad type to build single grouping set.</span>
<a name="line-117"></a><a name="AggregatingSet"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>AggregatingSet</span>      <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AggregatingSetT</span>      <span class='hs-conid'>Identity</span>
<a name="line-118"></a>
<a name="line-119"></a><a name="AggregatingPowerSet"></a><span class='hs-comment'>-- | Context monad type to build grouping power set.</span>
<a name="line-120"></a><a name="AggregatingPowerSet"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>AggregatingPowerSet</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AggregatingPowerSetT</span> <span class='hs-conid'>Identity</span>
<a name="line-121"></a>
<a name="line-122"></a><a name="AggregatingSetList"></a><span class='hs-comment'>-- | Context monad type to build grouping set list.</span>
<a name="line-123"></a><a name="AggregatingSetList"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>AggregatingSetList</span>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AggregatingSetListT</span>  <span class='hs-conid'>Identity</span>
<a name="line-124"></a>
<a name="line-125"></a><a name="PartitioningSet"></a><span class='hs-comment'>-- | Context monad type to build partition keys set.</span>
<a name="line-126"></a><a name="PartitioningSet"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>PartitioningSet</span> <span class='hs-varid'>c</span>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PartitioningSetT</span> <span class='hs-varid'>c</span>   <span class='hs-conid'>Identity</span>
<a name="line-127"></a>
<a name="line-128"></a><a name="key"></a><span class='hs-comment'>-- | Specify key of single grouping set from Projection.</span>
<a name="line-129"></a><span class='hs-definition'>key</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Projection</span> <span class='hs-conid'>Flat</span> <span class='hs-varid'>r</span>
<a name="line-130"></a>    <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AggregatingSet</span> <span class='hs-layout'>(</span><span class='hs-conid'>Projection</span> <span class='hs-conid'>Aggregated</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-131"></a><span class='hs-definition'>key</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-132"></a>  <span class='hs-varid'>mapM_</span> <span class='hs-varid'>unsafeAggregateWithTerm</span> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>aggregateColumnRef</span> <span class='hs-varid'>col</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>col</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-conid'>Projection</span><span class='hs-varop'>.</span><span class='hs-varid'>columns</span> <span class='hs-varid'>p</span><span class='hs-keyglyph'>]</span>
<a name="line-133"></a>  <span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Projection</span><span class='hs-varop'>.</span><span class='hs-varid'>just</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Projection</span><span class='hs-varop'>.</span><span class='hs-varid'>unsafeToAggregated</span> <span class='hs-varid'>p</span>
<a name="line-134"></a>
<a name="line-135"></a><a name="key'"></a><span class='hs-comment'>-- | Specify key of single grouping set.</span>
<a name="line-136"></a><span class='hs-definition'>key'</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>AggregateKey</span> <span class='hs-varid'>a</span>
<a name="line-137"></a>     <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AggregatingSet</span> <span class='hs-varid'>a</span>
<a name="line-138"></a><span class='hs-definition'>key'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>aggregateKey</span>
<a name="line-139"></a>
<a name="line-140"></a><a name="set"></a><span class='hs-comment'>-- | Finalize and specify single grouping set.</span>
<a name="line-141"></a><span class='hs-definition'>set</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>AggregatingSet</span> <span class='hs-varid'>a</span>
<a name="line-142"></a>    <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AggregatingSetList</span> <span class='hs-varid'>a</span>
<a name="line-143"></a><span class='hs-definition'>set</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-144"></a>  <span class='hs-keyword'>let</span> <span class='hs-layout'>(</span><span class='hs-varid'>p</span><span class='hs-layout'>,</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>second</span> <span class='hs-varid'>aggregateGroupingSet</span> <span class='hs-varop'>.</span> <span class='hs-varid'>extractTermList</span> <span class='hs-varop'>$</span> <span class='hs-varid'>s</span>
<a name="line-145"></a>  <span class='hs-varid'>unsafeAggregateWithTerm</span> <span class='hs-varid'>c</span>
<a name="line-146"></a>  <span class='hs-varid'>return</span> <span class='hs-varid'>p</span>
<a name="line-147"></a>
<a name="line-148"></a><a name="bkey"></a><span class='hs-comment'>-- | Specify key of rollup and cube power set.</span>
<a name="line-149"></a><span class='hs-definition'>bkey</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Projection</span> <span class='hs-conid'>Flat</span> <span class='hs-varid'>r</span>
<a name="line-150"></a>     <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AggregatingPowerSet</span> <span class='hs-layout'>(</span><span class='hs-conid'>Projection</span> <span class='hs-conid'>Aggregated</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-151"></a><span class='hs-definition'>bkey</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-152"></a>  <span class='hs-varid'>unsafeAggregateWithTerm</span> <span class='hs-varop'>.</span> <span class='hs-varid'>aggregatePowerKey</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Projection</span><span class='hs-varop'>.</span><span class='hs-varid'>columns</span> <span class='hs-varid'>p</span>
<a name="line-153"></a>  <span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Projection</span><span class='hs-varop'>.</span><span class='hs-varid'>just</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Projection</span><span class='hs-varop'>.</span><span class='hs-varid'>unsafeToAggregated</span> <span class='hs-varid'>p</span>
<a name="line-154"></a>
<a name="line-155"></a><a name="finalizePower"></a><span class='hs-definition'>finalizePower</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>[</span><span class='hs-conid'>AggregateBitKey</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AggregateElem</span><span class='hs-layout'>)</span>
<a name="line-156"></a>              <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AggregatingPowerSet</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AggregateKey</span> <span class='hs-varid'>a</span>
<a name="line-157"></a><span class='hs-definition'>finalizePower</span> <span class='hs-varid'>finalize</span> <span class='hs-varid'>pow</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>unsafeAggregateKey</span> <span class='hs-varop'>.</span> <span class='hs-varid'>second</span> <span class='hs-varid'>finalize</span> <span class='hs-varop'>.</span> <span class='hs-varid'>extractTermList</span> <span class='hs-varop'>$</span> <span class='hs-varid'>pow</span>
<a name="line-158"></a>
<a name="line-159"></a><a name="rollup"></a><span class='hs-comment'>-- | Finalize grouping power set as rollup power set.</span>
<a name="line-160"></a><span class='hs-definition'>rollup</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>AggregatingPowerSet</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AggregateKey</span> <span class='hs-varid'>a</span>
<a name="line-161"></a><span class='hs-definition'>rollup</span> <span class='hs-keyglyph'>=</span>  <span class='hs-varid'>finalizePower</span> <span class='hs-varid'>aggregateRollup</span>
<a name="line-162"></a>
<a name="line-163"></a><a name="cube"></a><span class='hs-comment'>-- | Finalize grouping power set as cube power set.</span>
<a name="line-164"></a><span class='hs-definition'>cube</span>   <span class='hs-keyglyph'>::</span> <span class='hs-conid'>AggregatingPowerSet</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AggregateKey</span> <span class='hs-varid'>a</span>
<a name="line-165"></a><span class='hs-definition'>cube</span>   <span class='hs-keyglyph'>=</span>  <span class='hs-varid'>finalizePower</span> <span class='hs-varid'>aggregateCube</span>
<a name="line-166"></a>
<a name="line-167"></a><a name="groupingSets"></a><span class='hs-comment'>-- | Finalize grouping set list.</span>
<a name="line-168"></a><span class='hs-definition'>groupingSets</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>AggregatingSetList</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AggregateKey</span> <span class='hs-varid'>a</span>
<a name="line-169"></a><span class='hs-definition'>groupingSets</span> <span class='hs-keyglyph'>=</span>  <span class='hs-varid'>unsafeAggregateKey</span> <span class='hs-varop'>.</span> <span class='hs-varid'>second</span> <span class='hs-varid'>aggregateSets</span> <span class='hs-varop'>.</span> <span class='hs-varid'>extractTermList</span>
</pre></body>
</html>