Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 4764914f605c152e932025400e9be0fa > files > 29

ghc-tagged-devel-0.2.3.1-1.fc15.i686.rpm

<?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://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
<title>Data/Tagged.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, GeneralizedNewtypeDeriving #-}</span>
<a name="line-2"></a><span class='hs-comment'>----------------------------------------------------------------------------</span>
<a name="line-3"></a><span class='hs-comment'>-- |</span>
<a name="line-4"></a><span class='hs-comment'>-- Module     : Data.Tagged</span>
<a name="line-5"></a><span class='hs-comment'>-- Copyright  : 2009-2011 Edward Kmett</span>
<a name="line-6"></a><span class='hs-comment'>-- License    : BSD3</span>
<a name="line-7"></a><span class='hs-comment'>--</span>
<a name="line-8"></a><span class='hs-comment'>-- Maintainer  : Edward Kmett &lt;ekmett@gmail.com&gt;</span>
<a name="line-9"></a><span class='hs-comment'>-- Stability   : experimental</span>
<a name="line-10"></a><span class='hs-comment'>-- Portability : generalized newtype deriving</span>
<a name="line-11"></a><span class='hs-comment'>--</span>
<a name="line-12"></a><span class='hs-comment'>-------------------------------------------------------------------------------</span>
<a name="line-13"></a>
<a name="line-14"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Tagged</span>
<a name="line-15"></a>    <span class='hs-layout'>(</span> 
<a name="line-16"></a>    <span class='hs-comment'>-- * Tagged values</span>
<a name="line-17"></a>      <span class='hs-conid'>Tagged</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-varid'>retag</span>
<a name="line-19"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>untag</span>
<a name="line-20"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>tagSelf</span>
<a name="line-21"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>untagSelf</span>
<a name="line-22"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>asTaggedTypeOf</span>
<a name="line-23"></a>    <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-24"></a>
<a name="line-25"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Applicative</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varop'>&lt;$&gt;</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Applicative</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-26"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-varid'>liftM</span><span class='hs-layout'>)</span>
<a name="line-27"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Traversable</span> <span class='hs-layout'>(</span><span class='hs-conid'>Traversable</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-28"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Foldable</span> <span class='hs-layout'>(</span><span class='hs-conid'>Foldable</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-29"></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><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-30"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Ix</span> <span class='hs-layout'>(</span><span class='hs-conid'>Ix</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-31"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>Read</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'>Semigroup</span>
<a name="line-33"></a>
<a name="line-34"></a><span class='hs-comment'>-- | A @'Tagged' s b@ value is a value @b@ with an attached phantom type @s@.</span>
<a name="line-35"></a><span class='hs-comment'>-- This can be used in place of the more traditional but less safe idiom of</span>
<a name="line-36"></a><span class='hs-comment'>-- passing in an undefined value with the type, because unlike an @(s -&gt; b)@, </span>
<a name="line-37"></a><span class='hs-comment'>-- a @'Tagged' s b@ can't try to use the argument @s@ as a real value.</span>
<a name="line-38"></a><span class='hs-comment'>--</span>
<a name="line-39"></a><span class='hs-comment'>-- Moreover, you don't have to rely on the compiler to inline away the extra</span>
<a name="line-40"></a><span class='hs-comment'>-- argument, because the newtype is \"free\"</span>
<a name="line-41"></a>
<a name="line-42"></a><a name="Tagged"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Tagged</span> <span class='hs-varid'>s</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Tagged</span> <span class='hs-layout'>{</span> <span class='hs-varid'>unTagged</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>b</span> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> 
<a name="line-43"></a>  <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'>Ix</span><span class='hs-layout'>,</span> <span class='hs-conid'>Enum</span><span class='hs-layout'>,</span> <span class='hs-conid'>Bounded</span><span class='hs-layout'>,</span> <span class='hs-conid'>Num</span><span class='hs-layout'>,</span> <span class='hs-conid'>Real</span><span class='hs-layout'>,</span> <span class='hs-conid'>Integral</span><span class='hs-layout'>,</span> <span class='hs-conid'>Fractional</span><span class='hs-layout'>,</span> <span class='hs-conid'>Floating</span><span class='hs-layout'>,</span> <span class='hs-conid'>RealFrac</span><span class='hs-layout'>,</span> <span class='hs-conid'>RealFloat</span>
<a name="line-44"></a><span class='hs-cpp'>#ifdef LANGUAGE_DeriveDataTypeable</span>
<a name="line-45"></a>  <span class='hs-layout'>,</span> <span class='hs-conid'>Data</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span>
<a name="line-46"></a><span class='hs-cpp'>#endif</span>
<a name="line-47"></a>  <span class='hs-layout'>)</span>
<a name="line-48"></a>
<a name="line-49"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Show</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>Show</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>s</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-50"></a>    <span class='hs-varid'>showsPrec</span> <span class='hs-varid'>n</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>showParen</span> <span class='hs-layout'>(</span><span class='hs-varid'>n</span> <span class='hs-varop'>&gt;</span> <span class='hs-num'>10</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span>
<a name="line-51"></a>        <span class='hs-varid'>showString</span> <span class='hs-str'>"Tagged "</span> <span class='hs-varop'>.</span>
<a name="line-52"></a>        <span class='hs-varid'>showsPrec</span> <span class='hs-num'>11</span> <span class='hs-varid'>b</span>
<a name="line-53"></a>
<a name="line-54"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Semigroup</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>Semigroup</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>s</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-55"></a>    <span class='hs-conid'>Tagged</span> <span class='hs-varid'>a</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-conid'>Tagged</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Tagged</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-56"></a>
<a name="line-57"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Read</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>Read</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>s</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-58"></a>    <span class='hs-varid'>readPrec</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>parens</span> <span class='hs-varop'>$</span> <span class='hs-varid'>prec</span> <span class='hs-num'>10</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
<a name="line-59"></a>        <span class='hs-conid'>Ident</span> <span class='hs-str'>"Tagged"</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>lexP</span>
<a name="line-60"></a>        <span class='hs-conid'>Tagged</span> <span class='hs-varop'>&lt;$&gt;</span> <span class='hs-varid'>step</span> <span class='hs-varid'>readPrec</span>
<a name="line-61"></a>
<a name="line-62"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Functor</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> 
<a name="line-63"></a>    <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Tagged</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-64"></a>    <span class='hs-comment'>{-# INLINE fmap #-}</span>
<a name="line-65"></a>
<a name="line-66"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Applicative</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>s</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-keyglyph'>=</span> <span class='hs-conid'>Tagged</span>
<a name="line-68"></a>    <span class='hs-comment'>{-# INLINE pure #-}</span>
<a name="line-69"></a>    <span class='hs-conid'>Tagged</span> <span class='hs-varid'>f</span> <span class='hs-varop'>&lt;*&gt;</span> <span class='hs-conid'>Tagged</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Tagged</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-70"></a>    <span class='hs-comment'>{-# INLINE (&lt;*&gt;) #-}</span>
<a name="line-71"></a>
<a name="line-72"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-73"></a>    <span class='hs-varid'>return</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Tagged</span>
<a name="line-74"></a>    <span class='hs-comment'>{-# INLINE return #-}</span>
<a name="line-75"></a>    <span class='hs-conid'>Tagged</span> <span class='hs-varid'>m</span> <span class='hs-varop'>&gt;&gt;=</span> <span class='hs-varid'>k</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>k</span> <span class='hs-varid'>m</span> 
<a name="line-76"></a>    <span class='hs-comment'>{-# INLINE (&gt;&gt;=) #-}</span>
<a name="line-77"></a>    <span class='hs-keyword'>_</span> <span class='hs-varop'>&gt;&gt;</span> <span class='hs-varid'>n</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>n</span>
<a name="line-78"></a>    <span class='hs-comment'>{-# INLINE (&gt;&gt;) #-}</span>
<a name="line-79"></a>
<a name="line-80"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Foldable</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-81"></a>    <span class='hs-varid'>foldMap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>f</span> <span class='hs-varid'>x</span>
<a name="line-82"></a>    <span class='hs-comment'>{-# INLINE foldMap #-}</span>
<a name="line-83"></a>    <span class='hs-varid'>fold</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span>
<a name="line-84"></a>    <span class='hs-comment'>{-# INLINE fold #-}</span>
<a name="line-85"></a>    <span class='hs-varid'>foldr</span> <span class='hs-varid'>f</span> <span class='hs-varid'>z</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>f</span> <span class='hs-varid'>x</span> <span class='hs-varid'>z</span>
<a name="line-86"></a>    <span class='hs-comment'>{-# INLINE foldr #-}</span>
<a name="line-87"></a>    <span class='hs-varid'>foldl</span> <span class='hs-varid'>f</span> <span class='hs-varid'>z</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>f</span> <span class='hs-varid'>z</span> <span class='hs-varid'>x</span>
<a name="line-88"></a>    <span class='hs-comment'>{-# INLINE foldl #-}</span>
<a name="line-89"></a>    <span class='hs-varid'>foldl1</span> <span class='hs-keyword'>_</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> 
<a name="line-90"></a>    <span class='hs-comment'>{-# INLINE foldl1 #-}</span>
<a name="line-91"></a>    <span class='hs-varid'>foldr1</span> <span class='hs-keyword'>_</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span>
<a name="line-92"></a>    <span class='hs-comment'>{-# INLINE foldr1 #-}</span>
<a name="line-93"></a>
<a name="line-94"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Traversable</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-95"></a>    <span class='hs-varid'>traverse</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Tagged</span> <span class='hs-varop'>&lt;$&gt;</span> <span class='hs-varid'>f</span> <span class='hs-varid'>x</span>
<a name="line-96"></a>    <span class='hs-comment'>{-# INLINE traverse #-}</span>
<a name="line-97"></a>    <span class='hs-varid'>sequenceA</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Tagged</span> <span class='hs-varop'>&lt;$&gt;</span> <span class='hs-varid'>x</span>
<a name="line-98"></a>    <span class='hs-comment'>{-# INLINE sequenceA #-}</span>
<a name="line-99"></a>    <span class='hs-varid'>mapM</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>liftM</span> <span class='hs-conid'>Tagged</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-100"></a>    <span class='hs-comment'>{-# INLINE mapM #-}</span>
<a name="line-101"></a>    <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>liftM</span> <span class='hs-conid'>Tagged</span> <span class='hs-varid'>x</span>
<a name="line-102"></a>    <span class='hs-comment'>{-# INLINE sequence #-}</span>
<a name="line-103"></a>
<a name="line-104"></a><a name="retag"></a><span class='hs-comment'>-- | Some times you need to change the tag you have lying around.</span>
<a name="line-105"></a><span class='hs-comment'>-- Idiomatic usage is to make a new combinator for the relationship between the</span>
<a name="line-106"></a><span class='hs-comment'>-- tags that you want to enforce, and define that combinator using 'retag'.</span>
<a name="line-107"></a><span class='hs-comment'>--</span>
<a name="line-108"></a><span class='hs-comment'>-- &gt; data Succ n</span>
<a name="line-109"></a><span class='hs-comment'>-- &gt; retagSucc :: Tagged n a -&gt; Tagged (Succ n) a</span>
<a name="line-110"></a><span class='hs-comment'>-- &gt; retagSucc = retag</span>
<a name="line-111"></a><span class='hs-definition'>retag</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Tagged</span> <span class='hs-varid'>s</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Tagged</span> <span class='hs-varid'>t</span> <span class='hs-varid'>b</span>
<a name="line-112"></a><span class='hs-definition'>retag</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Tagged</span> <span class='hs-varop'>.</span> <span class='hs-varid'>unTagged</span> 
<a name="line-113"></a><span class='hs-comment'>{-# INLINE retag #-}</span>
<a name="line-114"></a>
<a name="line-115"></a><a name="untag"></a><span class='hs-comment'>-- | Alias for 'unTagged'</span>
<a name="line-116"></a><span class='hs-definition'>untag</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Tagged</span> <span class='hs-varid'>s</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>b</span>
<a name="line-117"></a><span class='hs-definition'>untag</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>unTagged</span>
<a name="line-118"></a>
<a name="line-119"></a><a name="tagSelf"></a><span class='hs-comment'>-- | Tag a value with its own type.</span>
<a name="line-120"></a><span class='hs-definition'>tagSelf</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Tagged</span> <span class='hs-varid'>a</span> <span class='hs-varid'>a</span>
<a name="line-121"></a><span class='hs-definition'>tagSelf</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Tagged</span>
<a name="line-122"></a><span class='hs-comment'>{-# INLINE tagSelf #-}</span>
<a name="line-123"></a>
<a name="line-124"></a><a name="asTaggedTypeOf"></a><span class='hs-comment'>-- | 'asTaggedTypeOf' is a type-restricted version of 'const'. It is usually used as an infix operator, and its typing forces its first argument (which is usually overloaded) to have the same type as the tag of the second.</span>
<a name="line-125"></a><span class='hs-definition'>asTaggedTypeOf</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Tagged</span> <span class='hs-varid'>s</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>s</span>
<a name="line-126"></a><span class='hs-definition'>asTaggedTypeOf</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>const</span>
<a name="line-127"></a><span class='hs-comment'>{-# INLINE asTaggedTypeOf #-}</span>
<a name="line-128"></a>
<a name="line-129"></a><a name="untagSelf"></a><span class='hs-comment'>-- | 'untagSelf' is a type-restricted version of 'untag'.</span>
<a name="line-130"></a><span class='hs-definition'>untagSelf</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Tagged</span> <span class='hs-varid'>a</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span>
<a name="line-131"></a><span class='hs-definition'>untagSelf</span> <span class='hs-layout'>(</span><span class='hs-conid'>Tagged</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span>
<a name="line-132"></a><span class='hs-comment'>{-# INLINE untagSelf #-}</span>
<a name="line-133"></a>
</pre></body>
</html>