/usr/share/doc/libghc-tagged-doc/html/tagged.txt is in libghc-tagged-doc 0.8.5-2build1.
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 | -- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Haskell 98 phantom types to avoid unsafely passing dummy arguments
--
-- Haskell 98 phantom types to avoid unsafely passing dummy arguments
@package tagged
@version 0.8.5
module Data.Tagged
-- | A <tt><a>Tagged</a> s b</tt> value is a value <tt>b</tt> with an
-- attached phantom type <tt>s</tt>. This can be used in place of the
-- more traditional but less safe idiom of passing in an undefined value
-- with the type, because unlike an <tt>(s -> b)</tt>, a
-- <tt><a>Tagged</a> s b</tt> can't try to use the argument <tt>s</tt> as
-- a real value.
--
-- Moreover, you don't have to rely on the compiler to inline away the
-- extra argument, because the newtype is "free"
--
-- <a>Tagged</a> has kind <tt>k -> * -> *</tt> if the compiler
-- supports <tt>PolyKinds</tt>, therefore there is an extra <tt>k</tt>
-- showing in the instance haddocks that may cause confusion.
newtype Tagged s b
Tagged :: b -> Tagged s b
[unTagged] :: Tagged s b -> b
-- | Some times you need to change the tag you have lying around. Idiomatic
-- usage is to make a new combinator for the relationship between the
-- tags that you want to enforce, and define that combinator using
-- <a>retag</a>.
--
-- <pre>
-- data Succ n
-- retagSucc :: <a>Tagged</a> n a -> <a>Tagged</a> (Succ n) a
-- retagSucc = <a>retag</a>
-- </pre>
retag :: Tagged s b -> Tagged t b
-- | Alias for <a>unTagged</a>
untag :: Tagged s b -> b
-- | Tag a value with its own type.
tagSelf :: a -> Tagged a a
-- | <a>untagSelf</a> is a type-restricted version of <a>untag</a>.
untagSelf :: Tagged a a -> a
-- | <a>asTaggedTypeOf</a> is a type-restricted version of <a>const</a>. 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.
asTaggedTypeOf :: s -> tagged s b -> s
witness :: Tagged a b -> a -> b
-- | Convert from a <a>Tagged</a> representation to a representation based
-- on a <a>Proxy</a>.
proxy :: Tagged s a -> proxy s -> a
-- | Convert from a representation based on a <a>Proxy</a> to a
-- <a>Tagged</a> representation.
unproxy :: (Proxy s -> a) -> Tagged s a
-- | Another way to convert a proxy to a tag.
tagWith :: proxy s -> a -> Tagged s a
-- | Some times you need to change the proxy you have lying around.
-- Idiomatic usage is to make a new combinator for the relationship
-- between the proxies that you want to enforce, and define that
-- combinator using <a>reproxy</a>.
--
-- <pre>
-- data Succ n
-- reproxySucc :: proxy n -> <a>Proxy</a> (Succ n)
-- reproxySucc = <a>reproxy</a>
-- </pre>
reproxy :: proxy a -> Proxy b
instance forall k (s :: k). GHC.Generics.Generic1 (Data.Tagged.Tagged s)
instance forall k (s :: k) b. GHC.Generics.Generic (Data.Tagged.Tagged s b)
instance forall k (s :: k) b. GHC.Enum.Bounded b => GHC.Enum.Bounded (Data.Tagged.Tagged s b)
instance forall k (s :: k) b. GHC.Arr.Ix b => GHC.Arr.Ix (Data.Tagged.Tagged s b)
instance forall k (s :: k) b. GHC.Classes.Ord b => GHC.Classes.Ord (Data.Tagged.Tagged s b)
instance forall k (s :: k) b. GHC.Classes.Eq b => GHC.Classes.Eq (Data.Tagged.Tagged s b)
instance (Data.Data.Data s, Data.Data.Data b) => Data.Data.Data (Data.Tagged.Tagged s b)
instance forall k b (s :: k). GHC.Show.Show b => GHC.Show.Show (Data.Tagged.Tagged s b)
instance forall k b (s :: k). GHC.Read.Read b => GHC.Read.Read (Data.Tagged.Tagged s b)
instance forall k a (s :: k). Data.Semigroup.Semigroup a => Data.Semigroup.Semigroup (Data.Tagged.Tagged s a)
instance forall k a (s :: k). (Data.Semigroup.Semigroup a, GHC.Base.Monoid a) => GHC.Base.Monoid (Data.Tagged.Tagged s a)
instance forall k (s :: k). GHC.Base.Functor (Data.Tagged.Tagged s)
instance Data.Bifunctor.Bifunctor Data.Tagged.Tagged
instance forall k b (s :: k). Control.DeepSeq.NFData b => Control.DeepSeq.NFData (Data.Tagged.Tagged s b)
instance forall k (s :: k). Data.Functor.Classes.Eq1 (Data.Tagged.Tagged s)
instance forall k (s :: k). Data.Functor.Classes.Ord1 (Data.Tagged.Tagged s)
instance forall k (s :: k). Data.Functor.Classes.Read1 (Data.Tagged.Tagged s)
instance forall k (s :: k). Data.Functor.Classes.Show1 (Data.Tagged.Tagged s)
instance Data.Functor.Classes.Eq2 Data.Tagged.Tagged
instance Data.Functor.Classes.Ord2 Data.Tagged.Tagged
instance Data.Functor.Classes.Read2 Data.Tagged.Tagged
instance Data.Functor.Classes.Show2 Data.Tagged.Tagged
instance forall k (s :: k). GHC.Base.Applicative (Data.Tagged.Tagged s)
instance forall k (s :: k). GHC.Base.Monad (Data.Tagged.Tagged s)
instance forall k (s :: k). Data.Foldable.Foldable (Data.Tagged.Tagged s)
instance forall k (s :: k). Data.Traversable.Traversable (Data.Tagged.Tagged s)
instance forall k a (s :: k). GHC.Enum.Enum a => GHC.Enum.Enum (Data.Tagged.Tagged s a)
instance forall k a (s :: k). GHC.Num.Num a => GHC.Num.Num (Data.Tagged.Tagged s a)
instance forall k a (s :: k). GHC.Real.Real a => GHC.Real.Real (Data.Tagged.Tagged s a)
instance forall k a (s :: k). GHC.Real.Integral a => GHC.Real.Integral (Data.Tagged.Tagged s a)
instance forall k a (s :: k). GHC.Real.Fractional a => GHC.Real.Fractional (Data.Tagged.Tagged s a)
instance forall k a (s :: k). GHC.Float.Floating a => GHC.Float.Floating (Data.Tagged.Tagged s a)
instance forall k a (s :: k). GHC.Real.RealFrac a => GHC.Real.RealFrac (Data.Tagged.Tagged s a)
instance forall k a (s :: k). GHC.Float.RealFloat a => GHC.Float.RealFloat (Data.Tagged.Tagged s a)
instance forall k a (s :: k). Data.Bits.Bits a => Data.Bits.Bits (Data.Tagged.Tagged s a)
instance forall k a (s :: k). Data.Bits.FiniteBits a => Data.Bits.FiniteBits (Data.Tagged.Tagged s a)
instance forall k a (s :: k). Data.String.IsString a => Data.String.IsString (Data.Tagged.Tagged s a)
instance forall k a (s :: k). Foreign.Storable.Storable a => Foreign.Storable.Storable (Data.Tagged.Tagged s a)
module Data.Proxy.TH
-- | A proxy value quasiquoter. <tt>[pr|T|]</tt> will splice an expression
-- <tt>Proxy::Proxy T</tt>, while <tt>[pr|A,B,C|]</tt> will splice in a
-- value of <tt>Proxy :: Proxy [A,B,C]</tt>.
pr :: QuasiQuoter
-- | Like <a>pr</a>, but takes a single type, which is used to produce a
-- <tt>Proxy</tt> for a single-element list containing only that type.
-- This is useful for passing a single type to a function that wants a
-- list of types.
pr1 :: QuasiQuoter
|