/usr/share/doc/libghc-free-doc/html/src/Control-Alternative-Free.html is in libghc-free-doc 4.12.4-3build4.
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 | <?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/Control/Alternative/Free.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE CPP #-}</span>
<a name="line-2"></a><span class='hs-comment'>{-# LANGUAGE Rank2Types #-}</span>
<a name="line-3"></a><span class='hs-comment'>{-# LANGUAGE GADTs #-}</span>
<a name="line-4"></a><span class='hs-comment'>{-# LANGUAGE ScopedTypeVariables #-}</span>
<a name="line-5"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ >= 707</span>
<a name="line-6"></a><span class='hs-comment'>{-# LANGUAGE DeriveDataTypeable #-}</span>
<a name="line-7"></a><span class='hs-cpp'>#endif</span>
<a name="line-8"></a><span class='hs-comment'>{-# OPTIONS_GHC -Wall #-}</span>
<a name="line-9"></a><span class='hs-comment'>-----------------------------------------------------------------------------</span>
<a name="line-10"></a><span class='hs-comment'>-- |</span>
<a name="line-11"></a><span class='hs-comment'>-- Module : Control.Alternative.Free</span>
<a name="line-12"></a><span class='hs-comment'>-- Copyright : (C) 2012 Edward Kmett</span>
<a name="line-13"></a><span class='hs-comment'>-- License : BSD-style (see the file LICENSE)</span>
<a name="line-14"></a><span class='hs-comment'>--</span>
<a name="line-15"></a><span class='hs-comment'>-- Maintainer : Edward Kmett <ekmett@gmail.com></span>
<a name="line-16"></a><span class='hs-comment'>-- Stability : provisional</span>
<a name="line-17"></a><span class='hs-comment'>-- Portability : GADTs, Rank2Types</span>
<a name="line-18"></a><span class='hs-comment'>--</span>
<a name="line-19"></a><span class='hs-comment'>-- Left distributive 'Alternative' functors for free, based on a design</span>
<a name="line-20"></a><span class='hs-comment'>-- by Stijn van Drongelen.</span>
<a name="line-21"></a><span class='hs-comment'>----------------------------------------------------------------------------</span>
<a name="line-22"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Alternative</span><span class='hs-varop'>.</span><span class='hs-conid'>Free</span>
<a name="line-23"></a> <span class='hs-layout'>(</span> <span class='hs-conid'>Alt</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'>AltF</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-varid'>runAlt</span>
<a name="line-26"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>liftAlt</span>
<a name="line-27"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>hoistAlt</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'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Applicative</span>
<a name="line-31"></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'>Apply</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'>Functor</span><span class='hs-varop'>.</span><span class='hs-conid'>Alt</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varop'><!></span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-33"></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'>Functor</span><span class='hs-varop'>.</span><span class='hs-conid'>Alt</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Alt</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'>Semigroup</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>
<a name="line-36"></a>
<a name="line-37"></a><span class='hs-keyword'>infixl</span> <span class='hs-num'>3</span> <span class='hs-varop'>`Ap`</span>
<a name="line-38"></a>
<a name="line-39"></a><a name="AltF"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>AltF</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-keyword'>where</span>
<a name="line-40"></a> <span class='hs-conid'>Ap</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Alt</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>AltF</span> <span class='hs-varid'>f</span> <span class='hs-varid'>b</span>
<a name="line-41"></a> <span class='hs-conid'>Pure</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>AltF</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span>
<a name="line-42"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ >= 707</span>
<a name="line-43"></a> <span class='hs-keyword'>deriving</span> <span class='hs-conid'>Typeable</span>
<a name="line-44"></a><span class='hs-cpp'>#endif</span>
<a name="line-45"></a>
<a name="line-46"></a><a name="Alt"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Alt</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Alt</span> <span class='hs-layout'>{</span> <span class='hs-varid'>alternatives</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AltF</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span><span class='hs-keyglyph'>]</span> <span class='hs-layout'>}</span>
<a name="line-47"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ >= 707</span>
<a name="line-48"></a> <span class='hs-keyword'>deriving</span> <span class='hs-conid'>Typeable</span>
<a name="line-49"></a><span class='hs-cpp'>#endif</span>
<a name="line-50"></a>
<a name="line-51"></a><a name="instance%20Functor%20(AltF%20f)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Functor</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Functor</span> <span class='hs-layout'>(</span><span class='hs-conid'>AltF</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-52"></a> <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Pure</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Pure</span> <span class='hs-varop'>$</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span>
<a name="line-53"></a> <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Ap</span> <span class='hs-varid'>x</span> <span class='hs-varid'>g</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-varop'>`Ap`</span> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varop'>.</span><span class='hs-layout'>)</span> <span class='hs-varid'>g</span>
<a name="line-54"></a>
<a name="line-55"></a><a name="instance%20Functor%20(Alt%20f)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Functor</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Functor</span> <span class='hs-layout'>(</span><span class='hs-conid'>Alt</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-56"></a> <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Alt</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Alt</span> <span class='hs-varop'>$</span> <span class='hs-varid'>map</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span>
<a name="line-57"></a>
<a name="line-58"></a><a name="instance%20Applicative%20(AltF%20f)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Functor</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Applicative</span> <span class='hs-layout'>(</span><span class='hs-conid'>AltF</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-59"></a> <span class='hs-varid'>pure</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Pure</span>
<a name="line-60"></a> <span class='hs-comment'>{-# INLINE pure #-}</span>
<a name="line-61"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Pure</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varop'><*></span> <span class='hs-varid'>y</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-varid'>y</span> <span class='hs-comment'>-- fmap</span>
<a name="line-62"></a> <span class='hs-varid'>y</span> <span class='hs-varop'><*></span> <span class='hs-layout'>(</span><span class='hs-conid'>Pure</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-varop'>$</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-varid'>y</span> <span class='hs-comment'>-- interchange</span>
<a name="line-63"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Ap</span> <span class='hs-varid'>a</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varop'><*></span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span> <span class='hs-varop'>`Ap`</span> <span class='hs-layout'>(</span><span class='hs-varid'>flip</span> <span class='hs-varop'><$></span> <span class='hs-varid'>f</span> <span class='hs-varop'><*></span> <span class='hs-layout'>(</span><span class='hs-conid'>Alt</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>b</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-64"></a> <span class='hs-comment'>{-# INLINE (<*>) #-}</span>
<a name="line-65"></a>
<a name="line-66"></a><a name="instance%20Applicative%20(Alt%20f)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Functor</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Applicative</span> <span class='hs-layout'>(</span><span class='hs-conid'>Alt</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-67"></a> <span class='hs-varid'>pure</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Alt</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>pure</span> <span class='hs-varid'>a</span><span class='hs-keyglyph'>]</span>
<a name="line-68"></a> <span class='hs-comment'>{-# INLINE pure #-}</span>
<a name="line-69"></a>
<a name="line-70"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Alt</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-varop'><*></span> <span class='hs-varid'>ys</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Alt</span> <span class='hs-layout'>(</span><span class='hs-varid'>xs</span> <span class='hs-varop'>>>=</span> <span class='hs-varid'>alternatives</span> <span class='hs-varop'>.</span> <span class='hs-layout'>(</span><span class='hs-varop'>`ap'`</span> <span class='hs-varid'>ys</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-71"></a> <span class='hs-keyword'>where</span>
<a name="line-72"></a> <span class='hs-varid'>ap'</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>AltF</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Alt</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Alt</span> <span class='hs-varid'>f</span> <span class='hs-varid'>b</span>
<a name="line-73"></a>
<a name="line-74"></a> <span class='hs-conid'>Pure</span> <span class='hs-varid'>f</span> <span class='hs-varop'>`ap'`</span> <span class='hs-varid'>u</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-varid'>u</span>
<a name="line-75"></a> <span class='hs-layout'>(</span><span class='hs-varid'>u</span> <span class='hs-varop'>`Ap`</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varop'>`ap'`</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Alt</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>u</span> <span class='hs-varop'>`Ap`</span> <span class='hs-layout'>(</span><span class='hs-varid'>flip</span> <span class='hs-varop'><$></span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varop'><*></span> <span class='hs-varid'>v</span><span class='hs-keyglyph'>]</span>
<a name="line-76"></a> <span class='hs-comment'>{-# INLINE (<*>) #-}</span>
<a name="line-77"></a>
<a name="line-78"></a><a name="liftAltF"></a><span class='hs-definition'>liftAltF</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Functor</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>AltF</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span>
<a name="line-79"></a><span class='hs-definition'>liftAltF</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-varop'>`Ap`</span> <span class='hs-varid'>pure</span> <span class='hs-varid'>id</span>
<a name="line-80"></a><span class='hs-comment'>{-# INLINE liftAltF #-}</span>
<a name="line-81"></a>
<a name="line-82"></a><a name="liftAlt"></a><span class='hs-comment'>-- | A version of 'lift' that can be used with just a 'Functor' for @f@.</span>
<a name="line-83"></a><span class='hs-definition'>liftAlt</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Functor</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Alt</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span>
<a name="line-84"></a><span class='hs-definition'>liftAlt</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Alt</span> <span class='hs-varop'>.</span> <span class='hs-layout'>(</span><span class='hs-conop'>:</span><span class='hs-conid'>[]</span><span class='hs-layout'>)</span> <span class='hs-varop'>.</span> <span class='hs-varid'>liftAltF</span>
<a name="line-85"></a><span class='hs-comment'>{-# INLINE liftAlt #-}</span>
<a name="line-86"></a>
<a name="line-87"></a><a name="runAlt"></a><span class='hs-comment'>-- | Given a natural transformation from @f@ to @g@, this gives a canonical monoidal natural transformation from @'Alt' f@ to @g@.</span>
<a name="line-88"></a><span class='hs-definition'>runAlt</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyword'>forall</span> <span class='hs-varid'>f</span> <span class='hs-varid'>g</span> <span class='hs-varid'>a</span><span class='hs-varop'>.</span> <span class='hs-conid'>Alternative</span> <span class='hs-varid'>g</span> <span class='hs-keyglyph'>=></span> <span class='hs-layout'>(</span><span class='hs-keyword'>forall</span> <span class='hs-varid'>x</span><span class='hs-varop'>.</span> <span class='hs-varid'>f</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>g</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Alt</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>g</span> <span class='hs-varid'>a</span>
<a name="line-89"></a><span class='hs-definition'>runAlt</span> <span class='hs-varid'>u</span> <span class='hs-varid'>xs0</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>go</span> <span class='hs-varid'>xs0</span> <span class='hs-keyword'>where</span>
<a name="line-90"></a>
<a name="line-91"></a> <span class='hs-varid'>go</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Alt</span> <span class='hs-varid'>f</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>g</span> <span class='hs-varid'>b</span>
<a name="line-92"></a> <span class='hs-varid'>go</span> <span class='hs-layout'>(</span><span class='hs-conid'>Alt</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>foldr</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>go2</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span> <span class='hs-varop'><|></span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-varid'>empty</span> <span class='hs-varid'>xs</span>
<a name="line-93"></a>
<a name="line-94"></a> <span class='hs-varid'>go2</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>AltF</span> <span class='hs-varid'>f</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>g</span> <span class='hs-varid'>b</span>
<a name="line-95"></a> <span class='hs-varid'>go2</span> <span class='hs-layout'>(</span><span class='hs-conid'>Pure</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>pure</span> <span class='hs-varid'>a</span>
<a name="line-96"></a> <span class='hs-varid'>go2</span> <span class='hs-layout'>(</span><span class='hs-conid'>Ap</span> <span class='hs-varid'>x</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>flip</span> <span class='hs-varid'>id</span> <span class='hs-varop'><$></span> <span class='hs-varid'>u</span> <span class='hs-varid'>x</span> <span class='hs-varop'><*></span> <span class='hs-varid'>go</span> <span class='hs-varid'>f</span>
<a name="line-97"></a><span class='hs-comment'>{-# INLINABLE runAlt #-}</span>
<a name="line-98"></a>
<a name="line-99"></a><a name="instance%20Apply%20(Alt%20f)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>Functor</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Apply</span> <span class='hs-layout'>(</span><span class='hs-conid'>Alt</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-100"></a> <span class='hs-layout'>(</span><span class='hs-varop'><.></span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varop'><*></span><span class='hs-layout'>)</span>
<a name="line-101"></a> <span class='hs-comment'>{-# INLINE (<.>) #-}</span>
<a name="line-102"></a>
<a name="line-103"></a><a name="instance%20Alt.Alt%20(Alt%20f)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>Functor</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Alt</span><span class='hs-varop'>.</span><span class='hs-conid'>Alt</span> <span class='hs-layout'>(</span><span class='hs-conid'>Alt</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-104"></a> <span class='hs-layout'>(</span><span class='hs-varop'><!></span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varop'><|></span><span class='hs-layout'>)</span>
<a name="line-105"></a> <span class='hs-comment'>{-# INLINE (<!>) #-}</span>
<a name="line-106"></a>
<a name="line-107"></a><a name="instance%20Alternative%20(Alt%20f)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>Functor</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Alternative</span> <span class='hs-layout'>(</span><span class='hs-conid'>Alt</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-108"></a> <span class='hs-varid'>empty</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Alt</span> <span class='hs-conid'>[]</span>
<a name="line-109"></a> <span class='hs-comment'>{-# INLINE empty #-}</span>
<a name="line-110"></a> <span class='hs-conid'>Alt</span> <span class='hs-keyword'>as</span> <span class='hs-varop'><|></span> <span class='hs-conid'>Alt</span> <span class='hs-varid'>bs</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Alt</span> <span class='hs-layout'>(</span><span class='hs-keyword'>as</span> <span class='hs-varop'>++</span> <span class='hs-varid'>bs</span><span class='hs-layout'>)</span>
<a name="line-111"></a> <span class='hs-comment'>{-# INLINE (<|>) #-}</span>
<a name="line-112"></a>
<a name="line-113"></a><a name="instance%20Semigroup%20(Alt%20f%20a)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>Functor</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Semigroup</span> <span class='hs-layout'>(</span><span class='hs-conid'>Alt</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-114"></a> <span class='hs-layout'>(</span><span class='hs-varop'><></span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varop'><|></span><span class='hs-layout'>)</span>
<a name="line-115"></a> <span class='hs-comment'>{-# INLINE (<>) #-}</span>
<a name="line-116"></a>
<a name="line-117"></a><a name="instance%20Monoid%20(Alt%20f%20a)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>Functor</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Monoid</span> <span class='hs-layout'>(</span><span class='hs-conid'>Alt</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-118"></a> <span class='hs-varid'>mempty</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>empty</span>
<a name="line-119"></a> <span class='hs-comment'>{-# INLINE mempty #-}</span>
<a name="line-120"></a> <span class='hs-varid'>mappend</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varop'><|></span><span class='hs-layout'>)</span>
<a name="line-121"></a> <span class='hs-comment'>{-# INLINE mappend #-}</span>
<a name="line-122"></a> <span class='hs-varid'>mconcat</span> <span class='hs-keyword'>as</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Alt</span> <span class='hs-layout'>(</span><span class='hs-keyword'>as</span> <span class='hs-varop'>>>=</span> <span class='hs-varid'>alternatives</span><span class='hs-layout'>)</span>
<a name="line-123"></a> <span class='hs-comment'>{-# INLINE mconcat #-}</span>
<a name="line-124"></a>
<a name="line-125"></a><a name="hoistAltF"></a><span class='hs-definition'>hoistAltF</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-keyword'>forall</span> <span class='hs-varid'>a</span><span class='hs-varop'>.</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>g</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>AltF</span> <span class='hs-varid'>f</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>AltF</span> <span class='hs-varid'>g</span> <span class='hs-varid'>b</span>
<a name="line-126"></a><span class='hs-definition'>hoistAltF</span> <span class='hs-keyword'>_</span> <span class='hs-layout'>(</span><span class='hs-conid'>Pure</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Pure</span> <span class='hs-varid'>a</span>
<a name="line-127"></a><span class='hs-definition'>hoistAltF</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Ap</span> <span class='hs-varid'>x</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Ap</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>hoistAlt</span> <span class='hs-varid'>f</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span>
<a name="line-128"></a><span class='hs-comment'>{-# INLINE hoistAltF #-}</span>
<a name="line-129"></a>
<a name="line-130"></a><a name="hoistAlt"></a><span class='hs-comment'>-- | Given a natural transformation from @f@ to @g@ this gives a monoidal natural transformation from @Alt f@ to @Alt g@.</span>
<a name="line-131"></a><span class='hs-definition'>hoistAlt</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-keyword'>forall</span> <span class='hs-varid'>a</span><span class='hs-varop'>.</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>g</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Alt</span> <span class='hs-varid'>f</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Alt</span> <span class='hs-varid'>g</span> <span class='hs-varid'>b</span>
<a name="line-132"></a><span class='hs-definition'>hoistAlt</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Alt</span> <span class='hs-keyword'>as</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Alt</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-layout'>(</span><span class='hs-varid'>hoistAltF</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyword'>as</span><span class='hs-layout'>)</span>
<a name="line-133"></a><span class='hs-comment'>{-# INLINE hoistAlt #-}</span>
<a name="line-134"></a>
<a name="line-135"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ < 707</span>
<a name="line-136"></a><a name="instance%20Typeable1%20(Alt%20f)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Typeable1</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Typeable1</span> <span class='hs-layout'>(</span><span class='hs-conid'>Alt</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-137"></a> <span class='hs-varid'>typeOf1</span> <span class='hs-varid'>t</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mkTyConApp</span> <span class='hs-varid'>altTyCon</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>typeOf1</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span> <span class='hs-keyword'>where</span>
<a name="line-138"></a> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Alt</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span>
<a name="line-139"></a> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>undefined</span>
<a name="line-140"></a>
<a name="line-141"></a><a name="instance%20Typeable1%20(AltF%20f)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Typeable1</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Typeable1</span> <span class='hs-layout'>(</span><span class='hs-conid'>AltF</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-142"></a> <span class='hs-varid'>typeOf1</span> <span class='hs-varid'>t</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mkTyConApp</span> <span class='hs-varid'>altFTyCon</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>typeOf1</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span> <span class='hs-keyword'>where</span>
<a name="line-143"></a> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>AltF</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span>
<a name="line-144"></a> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>undefined</span>
<a name="line-145"></a>
<a name="line-146"></a><a name="altTyCon"></a><span class='hs-definition'>altTyCon</span><span class='hs-layout'>,</span> <span class='hs-varid'>altFTyCon</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>TyCon</span>
<a name="line-147"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ < 704</span>
<a name="line-148"></a><span class='hs-definition'>altTyCon</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mkTyCon</span> <span class='hs-str'>"Control.Alternative.Free.Alt"</span>
<a name="line-149"></a><a name="altFTyCon"></a><span class='hs-definition'>altFTyCon</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mkTyCon</span> <span class='hs-str'>"Control.Alternative.Free.AltF"</span>
<a name="line-150"></a><span class='hs-cpp'>#else</span>
<a name="line-151"></a><span class='hs-definition'>altTyCon</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mkTyCon3</span> <span class='hs-str'>"free"</span> <span class='hs-str'>"Control.Alternative.Free"</span> <span class='hs-str'>"Alt"</span>
<a name="line-152"></a><span class='hs-definition'>altFTyCon</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mkTyCon3</span> <span class='hs-str'>"free"</span> <span class='hs-str'>"Control.Alternative.Free"</span> <span class='hs-str'>"AltF"</span>
<a name="line-153"></a><span class='hs-cpp'>#endif</span>
<a name="line-154"></a><span class='hs-comment'>{-# NOINLINE altTyCon #-}</span>
<a name="line-155"></a><span class='hs-comment'>{-# NOINLINE altFTyCon #-}</span>
<a name="line-156"></a><span class='hs-cpp'>#endif</span>
</pre></body>
</html>
|