/usr/share/doc/libghc-postgresql-simple-doc/html/src/Database-PostgreSQL-Simple-Types.html is in libghc-postgresql-simple-doc 0.4.0.2-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 | <?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/PostgreSQL/Simple/Types.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE DeriveDataTypeable, DeriveFunctor, GeneralizedNewtypeDeriving #-}</span>
<a name="line-2"></a>
<a name="line-3"></a><span class='hs-comment'>------------------------------------------------------------------------------</span>
<a name="line-4"></a><span class='hs-comment'>-- |</span>
<a name="line-5"></a><span class='hs-comment'>-- Module: Database.PostgreSQL.Simple.Types</span>
<a name="line-6"></a><span class='hs-comment'>-- Copyright: (c) 2011 MailRank, Inc.</span>
<a name="line-7"></a><span class='hs-comment'>-- (c) 2011-2012 Leon P Smith</span>
<a name="line-8"></a><span class='hs-comment'>-- License: BSD3</span>
<a name="line-9"></a><span class='hs-comment'>-- Maintainer: Leon P Smith <leon@melding-monads.com></span>
<a name="line-10"></a><span class='hs-comment'>-- Stability: experimental</span>
<a name="line-11"></a><span class='hs-comment'>--</span>
<a name="line-12"></a><span class='hs-comment'>-- Basic types.</span>
<a name="line-13"></a><span class='hs-comment'>--</span>
<a name="line-14"></a><span class='hs-comment'>------------------------------------------------------------------------------</span>
<a name="line-15"></a>
<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'>PostgreSQL</span><span class='hs-varop'>.</span><span class='hs-conid'>Simple</span><span class='hs-varop'>.</span><span class='hs-conid'>Types</span>
<a name="line-17"></a> <span class='hs-layout'>(</span>
<a name="line-18"></a> <span class='hs-conid'>Null</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Default</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-20"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Only</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-21"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>In</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-22"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Binary</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-23"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Query</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-24"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Oid</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-25"></a> <span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-conop'>:.</span><span class='hs-layout'>)</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-26"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Savepoint</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-27"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>PGArray</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-28"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-29"></a>
<a name="line-30"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Blaze</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-conid'>Builder</span> <span class='hs-layout'>(</span><span class='hs-varid'>toByteString</span><span class='hs-layout'>)</span>
<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'>Arrow</span> <span class='hs-layout'>(</span><span class='hs-varid'>first</span><span class='hs-layout'>)</span>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-layout'>(</span><span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-33"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Monoid</span> <span class='hs-layout'>(</span><span class='hs-conid'>Monoid</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</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'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>String</span> <span class='hs-layout'>(</span><span class='hs-conid'>IsString</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</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'>Typeable</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-36"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Blaze</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-conid'>Builder</span><span class='hs-varop'>.</span><span class='hs-conid'>Char</span><span class='hs-varop'>.</span><span class='hs-conid'>Utf8</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Utf8</span>
<a name="line-37"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>B</span>
<a name="line-38"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>PostgreSQL</span><span class='hs-varop'>.</span><span class='hs-conid'>LibPQ</span> <span class='hs-layout'>(</span><span class='hs-conid'>Oid</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-39"></a>
<a name="line-40"></a><a name="Null"></a><span class='hs-comment'>-- | A placeholder for the SQL @NULL@ value.</span>
<a name="line-41"></a><a name="Null"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Null</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Null</span>
<a name="line-42"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Read</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-43"></a>
<a name="line-44"></a><a name="instance%20Eq%20Null"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Eq</span> <span class='hs-conid'>Null</span> <span class='hs-keyword'>where</span>
<a name="line-45"></a> <span class='hs-keyword'>_</span> <span class='hs-varop'>==</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-46"></a> <span class='hs-keyword'>_</span> <span class='hs-varop'>/=</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-47"></a>
<a name="line-48"></a><a name="Default"></a><span class='hs-comment'>-- | A placeholder for the PostgreSQL @DEFAULT@ value.</span>
<a name="line-49"></a><a name="Default"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Default</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Default</span>
<a name="line-50"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Read</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-51"></a>
<a name="line-52"></a><a name="Query"></a><span class='hs-comment'>-- | A query string. This type is intended to make it difficult to</span>
<a name="line-53"></a><a name="Query"></a><span class='hs-comment'>-- construct a SQL query by concatenating string fragments, as that is</span>
<a name="line-54"></a><a name="Query"></a><span class='hs-comment'>-- an extremely common way to accidentally introduce SQL injection</span>
<a name="line-55"></a><a name="Query"></a><span class='hs-comment'>-- vulnerabilities into an application.</span>
<a name="line-56"></a><a name="Query"></a><span class='hs-comment'>--</span>
<a name="line-57"></a><a name="Query"></a><span class='hs-comment'>-- This type is an instance of 'IsString', so the easiest way to</span>
<a name="line-58"></a><a name="Query"></a><span class='hs-comment'>-- construct a query is to enable the @OverloadedStrings@ language</span>
<a name="line-59"></a><a name="Query"></a><span class='hs-comment'>-- extension and then simply write the query in double quotes.</span>
<a name="line-60"></a><a name="Query"></a><span class='hs-comment'>--</span>
<a name="line-61"></a><a name="Query"></a><span class='hs-comment'>-- > {-# LANGUAGE OverloadedStrings #-}</span>
<a name="line-62"></a><a name="Query"></a><span class='hs-comment'>-- ></span>
<a name="line-63"></a><a name="Query"></a><span class='hs-comment'>-- > import Database.PostgreSQL.Simple</span>
<a name="line-64"></a><a name="Query"></a><span class='hs-comment'>-- ></span>
<a name="line-65"></a><a name="Query"></a><span class='hs-comment'>-- > q :: Query</span>
<a name="line-66"></a><a name="Query"></a><span class='hs-comment'>-- > q = "select ?"</span>
<a name="line-67"></a><a name="Query"></a><span class='hs-comment'>--</span>
<a name="line-68"></a><a name="Query"></a><span class='hs-comment'>-- The underlying type is a 'ByteString', and literal Haskell strings</span>
<a name="line-69"></a><a name="Query"></a><span class='hs-comment'>-- that contain Unicode characters will be correctly transformed to</span>
<a name="line-70"></a><a name="Query"></a><span class='hs-comment'>-- UTF-8.</span>
<a name="line-71"></a><a name="Query"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Query</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Query</span> <span class='hs-layout'>{</span>
<a name="line-72"></a> <span class='hs-varid'>fromQuery</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ByteString</span>
<a name="line-73"></a> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-74"></a>
<a name="line-75"></a><a name="instance%20Show%20Query"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Show</span> <span class='hs-conid'>Query</span> <span class='hs-keyword'>where</span>
<a name="line-76"></a> <span class='hs-varid'>show</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>show</span> <span class='hs-varop'>.</span> <span class='hs-varid'>fromQuery</span>
<a name="line-77"></a>
<a name="line-78"></a><a name="instance%20Read%20Query"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Read</span> <span class='hs-conid'>Query</span> <span class='hs-keyword'>where</span>
<a name="line-79"></a> <span class='hs-varid'>readsPrec</span> <span class='hs-varid'>i</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-varid'>first</span> <span class='hs-conid'>Query</span><span class='hs-layout'>)</span> <span class='hs-varop'>.</span> <span class='hs-varid'>readsPrec</span> <span class='hs-varid'>i</span>
<a name="line-80"></a>
<a name="line-81"></a><a name="instance%20IsString%20Query"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>IsString</span> <span class='hs-conid'>Query</span> <span class='hs-keyword'>where</span>
<a name="line-82"></a> <span class='hs-varid'>fromString</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Query</span> <span class='hs-varop'>.</span> <span class='hs-varid'>toByteString</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Utf8</span><span class='hs-varop'>.</span><span class='hs-varid'>fromString</span>
<a name="line-83"></a>
<a name="line-84"></a><a name="instance%20Monoid%20Query"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monoid</span> <span class='hs-conid'>Query</span> <span class='hs-keyword'>where</span>
<a name="line-85"></a> <span class='hs-varid'>mempty</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Query</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span>
<a name="line-86"></a> <span class='hs-varid'>mappend</span> <span class='hs-layout'>(</span><span class='hs-conid'>Query</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Query</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Query</span> <span class='hs-layout'>(</span><span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-varid'>append</span> <span class='hs-varid'>a</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-87"></a> <span class='hs-comment'>{-# INLINE mappend #-}</span>
<a name="line-88"></a> <span class='hs-varid'>mconcat</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Query</span> <span class='hs-layout'>(</span><span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-varid'>concat</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-varid'>fromQuery</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-89"></a>
<a name="line-90"></a><a name="Only"></a><span class='hs-comment'>-- | A single-value \"collection\".</span>
<a name="line-91"></a><a name="Only"></a><span class='hs-comment'>--</span>
<a name="line-92"></a><a name="Only"></a><span class='hs-comment'>-- This is useful if you need to supply a single parameter to a SQL</span>
<a name="line-93"></a><a name="Only"></a><span class='hs-comment'>-- query, or extract a single column from a SQL result.</span>
<a name="line-94"></a><a name="Only"></a><span class='hs-comment'>--</span>
<a name="line-95"></a><a name="Only"></a><span class='hs-comment'>-- Parameter example:</span>
<a name="line-96"></a><a name="Only"></a><span class='hs-comment'>--</span>
<a name="line-97"></a><a name="Only"></a><span class='hs-comment'>-- @query c \"select x from scores where x > ?\" ('Only' (42::Int))@</span>
<a name="line-98"></a><a name="Only"></a><span class='hs-comment'>--</span>
<a name="line-99"></a><a name="Only"></a><span class='hs-comment'>-- Result example:</span>
<a name="line-100"></a><a name="Only"></a><span class='hs-comment'>--</span>
<a name="line-101"></a><a name="Only"></a><span class='hs-comment'>-- @xs <- query_ c \"select id from users\"</span>
<a name="line-102"></a><a name="Only"></a><span class='hs-comment'>--forM_ xs $ \\('Only' id) -> {- ... -}@</span>
<a name="line-103"></a><a name="Only"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Only</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Only</span> <span class='hs-layout'>{</span>
<a name="line-104"></a> <span class='hs-varid'>fromOnly</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span>
<a name="line-105"></a> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Read</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Functor</span><span class='hs-layout'>)</span>
<a name="line-106"></a>
<a name="line-107"></a><a name="In"></a><span class='hs-comment'>-- | Wrap a list of values for use in an @IN@ clause. Replaces a</span>
<a name="line-108"></a><a name="In"></a><span class='hs-comment'>-- single \"@?@\" character with a parenthesized list of rendered</span>
<a name="line-109"></a><a name="In"></a><span class='hs-comment'>-- values.</span>
<a name="line-110"></a><a name="In"></a><span class='hs-comment'>--</span>
<a name="line-111"></a><a name="In"></a><span class='hs-comment'>-- Example:</span>
<a name="line-112"></a><a name="In"></a><span class='hs-comment'>--</span>
<a name="line-113"></a><a name="In"></a><span class='hs-comment'>-- > query c "select * from whatever where id in ?" (Only (In [3,4,5]))</span>
<a name="line-114"></a><a name="In"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>In</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>In</span> <span class='hs-varid'>a</span>
<a name="line-115"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Read</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Functor</span><span class='hs-layout'>)</span>
<a name="line-116"></a>
<a name="line-117"></a><a name="Binary"></a><span class='hs-comment'>-- | Wrap binary data for use as a @bytea@ value.</span>
<a name="line-118"></a><a name="Binary"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Binary</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Binary</span> <span class='hs-layout'>{</span><span class='hs-varid'>fromBinary</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span><span class='hs-layout'>}</span>
<a name="line-119"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Read</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Functor</span><span class='hs-layout'>)</span>
<a name="line-120"></a>
<a name="line-121"></a>
<a name="line-122"></a><a name="PGArray"></a><span class='hs-comment'>-- | Wrap a list for use as a PostgreSQL array.</span>
<a name="line-123"></a><a name="PGArray"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>PGArray</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PGArray</span> <span class='hs-layout'>{</span><span class='hs-varid'>fromPGArray</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>a</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>}</span>
<a name="line-124"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Read</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Functor</span><span class='hs-layout'>)</span>
<a name="line-125"></a>
<a name="line-126"></a><span class='hs-comment'>-- | A composite type to parse your custom data structures without</span>
<a name="line-127"></a><span class='hs-comment'>-- having to define dummy newtype wrappers every time.</span>
<a name="line-128"></a><span class='hs-comment'>--</span>
<a name="line-129"></a><span class='hs-comment'>--</span>
<a name="line-130"></a><span class='hs-comment'>-- > instance FromRow MyData where ...</span>
<a name="line-131"></a><span class='hs-comment'>--</span>
<a name="line-132"></a><span class='hs-comment'>-- > instance FromRow MyData2 where ...</span>
<a name="line-133"></a><span class='hs-comment'>--</span>
<a name="line-134"></a><span class='hs-comment'>--</span>
<a name="line-135"></a><span class='hs-comment'>-- then I can do the following for free:</span>
<a name="line-136"></a><span class='hs-comment'>--</span>
<a name="line-137"></a><span class='hs-comment'>-- @</span>
<a name="line-138"></a><span class='hs-comment'>-- res <- query' c "..."</span>
<a name="line-139"></a><span class='hs-comment'>-- forM res $ \\(MyData{..} :. MyData2{..}) -> do</span>
<a name="line-140"></a><span class='hs-comment'>-- ....</span>
<a name="line-141"></a><span class='hs-comment'>-- @</span>
<a name="line-142"></a><span class='hs-keyword'>data</span> <span class='hs-varid'>h</span> <span class='hs-conop'>:.</span> <span class='hs-varid'>t</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>h</span> <span class='hs-conop'>:.</span> <span class='hs-varid'>t</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span><span class='hs-conid'>Ord</span><span class='hs-layout'>,</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span><span class='hs-conid'>Read</span><span class='hs-layout'>,</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-143"></a>
<a name="line-144"></a><span class='hs-keyword'>infixr</span> <span class='hs-num'>3</span> <span class='hs-conop'>:.</span>
<a name="line-145"></a>
<a name="line-146"></a><a name="Savepoint"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Savepoint</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Savepoint</span> <span class='hs-conid'>Query</span>
<a name="line-147"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Read</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
</pre></body>
</html>
|