/usr/share/doc/libghc-configurator-doc/html/src/Data-Configurator-Types-Internal.html is in libghc-configurator-doc 0.3.0.0-3build1.
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 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 | <?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>Data/Configurator/Types/Internal.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, FlexibleInstances #-}</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'>-- Module: Data.Configurator.Types.Internal</span>
<a name="line-5"></a><span class='hs-comment'>-- Copyright: (c) 2011 MailRank, Inc.</span>
<a name="line-6"></a><span class='hs-comment'>-- License: BSD3</span>
<a name="line-7"></a><span class='hs-comment'>-- Maintainer: Bryan O'Sullivan <bos@serpentine.com></span>
<a name="line-8"></a><span class='hs-comment'>-- Stability: experimental</span>
<a name="line-9"></a><span class='hs-comment'>-- Portability: portable</span>
<a name="line-10"></a><span class='hs-comment'>--</span>
<a name="line-11"></a><span class='hs-comment'>-- Types for working with configuration files.</span>
<a name="line-12"></a>
<a name="line-13"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Configurator</span><span class='hs-varop'>.</span><span class='hs-conid'>Types</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-14"></a> <span class='hs-layout'>(</span>
<a name="line-15"></a> <span class='hs-conid'>BaseConfig</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-16"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Config</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-17"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Configured</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-18"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>AutoConfig</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'>Worth</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'>Name</span>
<a name="line-21"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Value</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'>Binding</span>
<a name="line-23"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Path</span>
<a name="line-24"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Directive</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-conid'>ConfigError</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'>KeyError</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'>Interpolate</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-conid'>Pattern</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-29"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>exact</span>
<a name="line-30"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>prefix</span>
<a name="line-31"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>ChangeHandler</span>
<a name="line-32"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-33"></a>
<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'>Exception</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'>Data</span> <span class='hs-layout'>(</span><span class='hs-conid'>Data</span><span class='hs-layout'>)</span>
<a name="line-36"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Hashable</span> <span class='hs-layout'>(</span><span class='hs-conid'>Hashable</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<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'>IORef</span> <span class='hs-layout'>(</span><span class='hs-conid'>IORef</span><span class='hs-layout'>)</span>
<a name="line-38"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span> <span class='hs-layout'>(</span><span class='hs-varid'>isSuffixOf</span><span class='hs-layout'>)</span>
<a name="line-39"></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-40"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-layout'>)</span>
<a name="line-41"></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'>Text</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>T</span>
<a name="line-42"></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-43"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Prelude</span> <span class='hs-varid'>hiding</span> <span class='hs-layout'>(</span><span class='hs-varid'>lookup</span><span class='hs-layout'>)</span>
<a name="line-44"></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'>HashMap</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>H</span>
<a name="line-45"></a>
<a name="line-46"></a><a name="Worth"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Worth</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Required</span> <span class='hs-layout'>{</span> <span class='hs-varid'>worth</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span> <span class='hs-layout'>}</span>
<a name="line-47"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Optional</span> <span class='hs-layout'>{</span> <span class='hs-varid'>worth</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span> <span class='hs-layout'>}</span>
<a name="line-48"></a> <span class='hs-keyword'>deriving</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-49"></a>
<a name="line-50"></a><a name="instance%20IsString%20(Worth%20FilePath)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>IsString</span> <span class='hs-layout'>(</span><span class='hs-conid'>Worth</span> <span class='hs-conid'>FilePath</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-51"></a> <span class='hs-varid'>fromString</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Required</span>
<a name="line-52"></a>
<a name="line-53"></a><a name="instance%20Eq%20(Worth%20a)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Eq</span> <span class='hs-layout'>(</span><span class='hs-conid'>Worth</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-54"></a> <span class='hs-varid'>a</span> <span class='hs-varop'>==</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>worth</span> <span class='hs-varid'>a</span> <span class='hs-varop'>==</span> <span class='hs-varid'>worth</span> <span class='hs-varid'>b</span>
<a name="line-55"></a>
<a name="line-56"></a><a name="instance%20Hashable%20(Worth%20a)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>Hashable</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Hashable</span> <span class='hs-layout'>(</span><span class='hs-conid'>Worth</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-57"></a> <span class='hs-varid'>hashWithSalt</span> <span class='hs-varid'>salt</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>hashWithSalt</span> <span class='hs-varid'>salt</span> <span class='hs-layout'>(</span><span class='hs-varid'>worth</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span>
<a name="line-58"></a>
<a name="line-59"></a><a name="BaseConfig"></a><span class='hs-comment'>-- | Global configuration data. This is the top-level config from which</span>
<a name="line-60"></a><a name="BaseConfig"></a><span class='hs-comment'>-- 'Config' values are derived by choosing a root location.</span>
<a name="line-61"></a><a name="BaseConfig"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>BaseConfig</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>BaseConfig</span> <span class='hs-layout'>{</span>
<a name="line-62"></a> <span class='hs-varid'>cfgAuto</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>AutoConfig</span>
<a name="line-63"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>cfgPaths</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IORef</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>Name</span><span class='hs-layout'>,</span> <span class='hs-conid'>Worth</span> <span class='hs-conid'>Path</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-64"></a> <span class='hs-comment'>-- ^ The files from which the 'Config' was loaded.</span>
<a name="line-65"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>cfgMap</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IORef</span> <span class='hs-layout'>(</span><span class='hs-conid'>H</span><span class='hs-varop'>.</span><span class='hs-conid'>HashMap</span> <span class='hs-conid'>Name</span> <span class='hs-conid'>Value</span><span class='hs-layout'>)</span>
<a name="line-66"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>cfgSubs</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IORef</span> <span class='hs-layout'>(</span><span class='hs-conid'>H</span><span class='hs-varop'>.</span><span class='hs-conid'>HashMap</span> <span class='hs-conid'>Pattern</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ChangeHandler</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-67"></a> <span class='hs-layout'>}</span>
<a name="line-68"></a>
<a name="line-69"></a><a name="Config"></a><span class='hs-comment'>-- | Configuration data.</span>
<a name="line-70"></a><a name="Config"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Config</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Config</span> <span class='hs-layout'>{</span> <span class='hs-varid'>root</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Text</span><span class='hs-layout'>,</span> <span class='hs-varid'>baseCfg</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>BaseConfig</span> <span class='hs-layout'>}</span>
<a name="line-71"></a>
<a name="line-72"></a><a name="instance%20Functor%20Worth"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Functor</span> <span class='hs-conid'>Worth</span> <span class='hs-keyword'>where</span>
<a name="line-73"></a> <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Required</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Required</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-74"></a> <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Optional</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Optional</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-75"></a>
<a name="line-76"></a><a name="ChangeHandler"></a><span class='hs-comment'>-- | An action to be invoked if a configuration property is changed.</span>
<a name="line-77"></a><a name="ChangeHandler"></a><span class='hs-comment'>--</span>
<a name="line-78"></a><a name="ChangeHandler"></a><span class='hs-comment'>-- If this action is invoked and throws an exception, the 'onError'</span>
<a name="line-79"></a><a name="ChangeHandler"></a><span class='hs-comment'>-- function will be called.</span>
<a name="line-80"></a><a name="ChangeHandler"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>ChangeHandler</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Name</span>
<a name="line-81"></a> <span class='hs-comment'>-- ^ Name of the changed property.</span>
<a name="line-82"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Value</span>
<a name="line-83"></a> <span class='hs-comment'>-- ^ Its new value, or 'Nothing' if it has</span>
<a name="line-84"></a> <span class='hs-comment'>-- vanished.</span>
<a name="line-85"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-86"></a>
<a name="line-87"></a><a name="Pattern"></a><span class='hs-comment'>-- | A pattern specifying the name of a property that has changed.</span>
<a name="line-88"></a><a name="Pattern"></a><span class='hs-comment'>--</span>
<a name="line-89"></a><a name="Pattern"></a><span class='hs-comment'>-- This type is an instance of the 'IsString' class. If you use the</span>
<a name="line-90"></a><a name="Pattern"></a><span class='hs-comment'>-- @OverloadedStrings@ language extension and want to write a</span>
<a name="line-91"></a><a name="Pattern"></a><span class='hs-comment'>-- 'prefix'-matching pattern as a literal string, do so by suffixing</span>
<a name="line-92"></a><a name="Pattern"></a><span class='hs-comment'>-- it with \"@.*@\", for example as follows:</span>
<a name="line-93"></a><a name="Pattern"></a><span class='hs-comment'>--</span>
<a name="line-94"></a><a name="Pattern"></a><span class='hs-comment'>-- > "foo.*"</span>
<a name="line-95"></a><a name="Pattern"></a><span class='hs-comment'>--</span>
<a name="line-96"></a><a name="Pattern"></a><span class='hs-comment'>-- If a pattern written as a literal string does not end with</span>
<a name="line-97"></a><a name="Pattern"></a><span class='hs-comment'>-- \"@.*@\", it is assumed to be 'exact'.</span>
<a name="line-98"></a><a name="Pattern"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Pattern</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Exact</span> <span class='hs-conid'>Name</span>
<a name="line-99"></a> <span class='hs-comment'>-- ^ An exact match.</span>
<a name="line-100"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Prefix</span> <span class='hs-conid'>Name</span>
<a name="line-101"></a> <span class='hs-comment'>-- ^ A prefix match. Given @'Prefix' \"foo\"@, this will</span>
<a name="line-102"></a> <span class='hs-comment'>-- match @\"foo.bar\"@, but not @\"foo\"@ or</span>
<a name="line-103"></a> <span class='hs-comment'>-- @\"foobar\"@.</span>
<a name="line-104"></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'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Data</span><span class='hs-layout'>)</span>
<a name="line-105"></a>
<a name="line-106"></a><a name="exact"></a><span class='hs-comment'>-- | A pattern that must match exactly.</span>
<a name="line-107"></a><span class='hs-definition'>exact</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Text</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Pattern</span>
<a name="line-108"></a><span class='hs-definition'>exact</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Exact</span>
<a name="line-109"></a>
<a name="line-110"></a><a name="prefix"></a><span class='hs-comment'>-- | A pattern that matches on a prefix of a property name. Given</span>
<a name="line-111"></a><span class='hs-comment'>-- @\"foo\"@, this will match @\"foo.bar\"@, but not @\"foo\"@ or</span>
<a name="line-112"></a><span class='hs-comment'>-- @\"foobar\"@.</span>
<a name="line-113"></a><span class='hs-definition'>prefix</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Text</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Pattern</span>
<a name="line-114"></a><span class='hs-definition'>prefix</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Prefix</span> <span class='hs-layout'>(</span><span class='hs-varid'>p</span> <span class='hs-varop'>`</span><span class='hs-conid'>T</span><span class='hs-varop'>.</span><span class='hs-varid'>snoc</span><span class='hs-varop'>`</span> <span class='hs-chr'>'.'</span><span class='hs-layout'>)</span>
<a name="line-115"></a>
<a name="line-116"></a><a name="instance%20IsString%20Pattern"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>IsString</span> <span class='hs-conid'>Pattern</span> <span class='hs-keyword'>where</span>
<a name="line-117"></a> <span class='hs-varid'>fromString</span> <span class='hs-varid'>s</span>
<a name="line-118"></a> <span class='hs-keyglyph'>|</span> <span class='hs-str'>".*"</span> <span class='hs-varop'>`isSuffixOf`</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Prefix</span> <span class='hs-varop'>.</span> <span class='hs-conid'>T</span><span class='hs-varop'>.</span><span class='hs-varid'>init</span> <span class='hs-varop'>.</span> <span class='hs-conid'>T</span><span class='hs-varop'>.</span><span class='hs-varid'>pack</span> <span class='hs-varop'>$</span> <span class='hs-varid'>s</span>
<a name="line-119"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Exact</span> <span class='hs-layout'>(</span><span class='hs-conid'>T</span><span class='hs-varop'>.</span><span class='hs-varid'>pack</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-120"></a>
<a name="line-121"></a><a name="instance%20Hashable%20Pattern"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Hashable</span> <span class='hs-conid'>Pattern</span> <span class='hs-keyword'>where</span>
<a name="line-122"></a> <span class='hs-varid'>hashWithSalt</span> <span class='hs-varid'>salt</span> <span class='hs-layout'>(</span><span class='hs-conid'>Exact</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>hashWithSalt</span> <span class='hs-varid'>salt</span> <span class='hs-varid'>n</span>
<a name="line-123"></a> <span class='hs-varid'>hashWithSalt</span> <span class='hs-varid'>salt</span> <span class='hs-layout'>(</span><span class='hs-conid'>Prefix</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>hashWithSalt</span> <span class='hs-varid'>salt</span> <span class='hs-varid'>n</span>
<a name="line-124"></a>
<a name="line-125"></a><a name="Configured"></a><span class='hs-comment'>-- | This class represents types that can be automatically and safely</span>
<a name="line-126"></a><a name="Configured"></a><span class='hs-comment'>-- converted /from/ a 'Value' /to/ a destination type. If conversion</span>
<a name="line-127"></a><a name="Configured"></a><span class='hs-comment'>-- fails because the types are not compatible, 'Nothing' is returned.</span>
<a name="line-128"></a><a name="Configured"></a><span class='hs-comment'>--</span>
<a name="line-129"></a><a name="Configured"></a><span class='hs-comment'>-- For an example of compatibility, a 'Value' of 'Bool' 'True' cannot</span>
<a name="line-130"></a><a name="Configured"></a><span class='hs-comment'>-- be 'convert'ed to an 'Int'.</span>
<a name="line-131"></a><a name="Configured"></a><span class='hs-keyword'>class</span> <span class='hs-conid'>Configured</span> <span class='hs-varid'>a</span> <span class='hs-keyword'>where</span>
<a name="line-132"></a> <span class='hs-varid'>convert</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Value</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-varid'>a</span>
<a name="line-133"></a>
<a name="line-134"></a> <span class='hs-varid'>convertList</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Value</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>a</span><span class='hs-keyglyph'>]</span>
<a name="line-135"></a> <span class='hs-varid'>convertList</span> <span class='hs-layout'>(</span><span class='hs-conid'>List</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mapM</span> <span class='hs-varid'>convert</span> <span class='hs-varid'>xs</span>
<a name="line-136"></a> <span class='hs-varid'>convertList</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span>
<a name="line-137"></a>
<a name="line-138"></a><a name="instance%20Configured%20%5ba%5d"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Configured</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Configured</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>a</span><span class='hs-keyglyph'>]</span> <span class='hs-keyword'>where</span>
<a name="line-139"></a> <span class='hs-varid'>convert</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>convertList</span>
<a name="line-140"></a>
<a name="line-141"></a><a name="ConfigError"></a><span class='hs-comment'>-- | An error occurred while processing a configuration file.</span>
<a name="line-142"></a><a name="ConfigError"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ConfigError</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ParseError</span> <span class='hs-conid'>FilePath</span> <span class='hs-conid'>String</span>
<a name="line-143"></a> <span class='hs-keyword'>deriving</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-144"></a>
<a name="line-145"></a><a name="instance%20Exception%20ConfigError"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Exception</span> <span class='hs-conid'>ConfigError</span>
<a name="line-146"></a>
<a name="line-147"></a><a name="KeyError"></a><span class='hs-comment'>-- | An error occurred while lookup up the given 'Name'.</span>
<a name="line-148"></a><a name="KeyError"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>KeyError</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>KeyError</span> <span class='hs-conid'>Name</span>
<a name="line-149"></a> <span class='hs-keyword'>deriving</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-150"></a>
<a name="line-151"></a><a name="instance%20Exception%20KeyError"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Exception</span> <span class='hs-conid'>KeyError</span>
<a name="line-152"></a>
<a name="line-153"></a><a name="AutoConfig"></a><span class='hs-comment'>-- | Directions for automatically reloading 'Config' data.</span>
<a name="line-154"></a><a name="AutoConfig"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>AutoConfig</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AutoConfig</span> <span class='hs-layout'>{</span>
<a name="line-155"></a> <span class='hs-varid'>interval</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span>
<a name="line-156"></a> <span class='hs-comment'>-- ^ Interval (in seconds) at which to check for updates to config</span>
<a name="line-157"></a> <span class='hs-comment'>-- files. The smallest allowed interval is one second.</span>
<a name="line-158"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>onError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>SomeException</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-159"></a> <span class='hs-comment'>-- ^ Action invoked when an attempt to reload a 'Config' or notify</span>
<a name="line-160"></a> <span class='hs-comment'>-- a 'ChangeHandler' causes an exception to be thrown.</span>
<a name="line-161"></a> <span class='hs-comment'>--</span>
<a name="line-162"></a> <span class='hs-comment'>-- If this action rethrows its exception or throws a new</span>
<a name="line-163"></a> <span class='hs-comment'>-- exception, the modification checking thread will be killed.</span>
<a name="line-164"></a> <span class='hs-comment'>-- You may want your application to treat that as a fatal error,</span>
<a name="line-165"></a> <span class='hs-comment'>-- as its configuration may no longer be consistent.</span>
<a name="line-166"></a> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-167"></a>
<a name="line-168"></a><a name="instance%20Show%20AutoConfig"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Show</span> <span class='hs-conid'>AutoConfig</span> <span class='hs-keyword'>where</span>
<a name="line-169"></a> <span class='hs-varid'>show</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"AutoConfig {interval = "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-varid'>interval</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-varop'>++</span> <span class='hs-str'>"}"</span>
<a name="line-170"></a>
<a name="line-171"></a><a name="Name"></a><span class='hs-comment'>-- | The name of a 'Config' value.</span>
<a name="line-172"></a><a name="Name"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Name</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Text</span>
<a name="line-173"></a>
<a name="line-174"></a><a name="Path"></a><span class='hs-comment'>-- | A packed 'FilePath'.</span>
<a name="line-175"></a><a name="Path"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Path</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Text</span>
<a name="line-176"></a>
<a name="line-177"></a><a name="Binding"></a><span class='hs-comment'>-- | A name-value binding.</span>
<a name="line-178"></a><a name="Binding"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Binding</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-conid'>Name</span><span class='hs-layout'>,</span><span class='hs-conid'>Value</span><span class='hs-layout'>)</span>
<a name="line-179"></a>
<a name="line-180"></a><a name="Directive"></a><span class='hs-comment'>-- | A directive in a configuration file.</span>
<a name="line-181"></a><a name="Directive"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Directive</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Import</span> <span class='hs-conid'>Path</span>
<a name="line-182"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Bind</span> <span class='hs-conid'>Name</span> <span class='hs-conid'>Value</span>
<a name="line-183"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Group</span> <span class='hs-conid'>Name</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Directive</span><span class='hs-keyglyph'>]</span>
<a name="line-184"></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'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Data</span><span class='hs-layout'>)</span>
<a name="line-185"></a>
<a name="line-186"></a><a name="Value"></a><span class='hs-comment'>-- | A value in a 'Config'.</span>
<a name="line-187"></a><a name="Value"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Value</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Bool</span> <span class='hs-conid'>Bool</span>
<a name="line-188"></a> <span class='hs-comment'>-- ^ A Boolean. Represented in a configuration file as @on@</span>
<a name="line-189"></a> <span class='hs-comment'>-- or @off@, @true@ or @false@ (case sensitive).</span>
<a name="line-190"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>String</span> <span class='hs-conid'>Text</span>
<a name="line-191"></a> <span class='hs-comment'>-- ^ A Unicode string. Represented in a configuration file</span>
<a name="line-192"></a> <span class='hs-comment'>-- as text surrounded by double quotes.</span>
<a name="line-193"></a> <span class='hs-comment'>--</span>
<a name="line-194"></a> <span class='hs-comment'>-- Escape sequences:</span>
<a name="line-195"></a> <span class='hs-comment'>--</span>
<a name="line-196"></a> <span class='hs-comment'>-- * @\\n@ - newline</span>
<a name="line-197"></a> <span class='hs-comment'>--</span>
<a name="line-198"></a> <span class='hs-comment'>-- * @\\r@ - carriage return</span>
<a name="line-199"></a> <span class='hs-comment'>--</span>
<a name="line-200"></a> <span class='hs-comment'>-- * @\\t@ - horizontal tab</span>
<a name="line-201"></a> <span class='hs-comment'>--</span>
<a name="line-202"></a> <span class='hs-comment'>-- * @\\\\@ - backslash</span>
<a name="line-203"></a> <span class='hs-comment'>--</span>
<a name="line-204"></a> <span class='hs-comment'>-- * @\\\"@ - quotes</span>
<a name="line-205"></a> <span class='hs-comment'>--</span>
<a name="line-206"></a> <span class='hs-comment'>-- * @\\u@/xxxx/ - Unicode character, encoded as four</span>
<a name="line-207"></a> <span class='hs-comment'>-- hexadecimal digits</span>
<a name="line-208"></a> <span class='hs-comment'>--</span>
<a name="line-209"></a> <span class='hs-comment'>-- * @\\u@/xxxx/@\\u@/xxxx/ - Unicode character (as two</span>
<a name="line-210"></a> <span class='hs-comment'>-- UTF-16 surrogates)</span>
<a name="line-211"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Number</span> <span class='hs-conid'>Rational</span>
<a name="line-212"></a> <span class='hs-comment'>-- ^ Integer.</span>
<a name="line-213"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>List</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Value</span><span class='hs-keyglyph'>]</span>
<a name="line-214"></a> <span class='hs-comment'>-- ^ Heterogeneous list. Represented in a configuration</span>
<a name="line-215"></a> <span class='hs-comment'>-- file as an opening square bracket \"@[@\", followed by a</span>
<a name="line-216"></a> <span class='hs-comment'>-- comma-separated series of values, ending with a closing</span>
<a name="line-217"></a> <span class='hs-comment'>-- square bracket \"@]@\".</span>
<a name="line-218"></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'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Data</span><span class='hs-layout'>)</span>
<a name="line-219"></a>
<a name="line-220"></a><a name="Interpolate"></a><span class='hs-comment'>-- | An interpolation directive.</span>
<a name="line-221"></a><a name="Interpolate"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Interpolate</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Literal</span> <span class='hs-conid'>Text</span>
<a name="line-222"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Interpolate</span> <span class='hs-conid'>Text</span>
<a name="line-223"></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'>Show</span><span class='hs-layout'>)</span>
</pre></body>
</html>
|