-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Make functions consume Proxy instead of undefined
--   
--   <tt>proxied</tt> is a simple library that exports a function to
--   convert constant functions to ones that take a <tt>proxy</tt> value in
--   the <a>Data.Proxied</a> module. This is useful for retrofiting
--   typeclasses that have functions that return a constant value for any
--   value of a particular type (but still need to consume some value,
--   since one of the parameterized types must appear in a typeclass
--   function). Often, these functions are given <tt>undefined</tt> as an
--   argument, which might be considered poor design.
--   
--   <tt>Proxy</tt>, however, does not carry any of the error-throwing
--   risks of <tt>undefined</tt>, so it is much more preferable to take
--   <tt>Proxy</tt> as an argument to a constant function instead of
--   <tt>undefined</tt>. Unfortunately, <tt>Proxy</tt> was included in
--   <tt>base</tt> until GHC 7.8, so many of <tt>base</tt>'s typeclasses
--   still contain constant functions that aren't amenable to passing
--   <tt>Proxy</tt>. <tt>proxied</tt> addresses this issue by providing
--   variants of those typeclass functions that take an explicit
--   <tt>proxy</tt> value.
--   
--   This library also contains the <a>Data.Proxyless</a> module, which
--   works in the opposite direction. That is, one can take functions which
--   take <tt>Proxy</tt> (or <tt>undefined</tt>) as an argument and convert
--   them to functions which take no arguments. This trick relies on the
--   <tt>-XTypeApplications</tt> extension, so it is only available with
--   GHC 8.0 or later.
@package proxied
@version 0.3


-- | Convert <a>undefined</a>-consuming functions to <a>Proxy</a>-consuming
--   ones with <a>proxied</a>.
--   
--   <i>Since: 0.1</i>
module Data.Proxied

-- | Converts a constant function to one that takes a <tt>proxy</tt>
--   argument.
--   
--   <i>Since: 0.1</i>
proxied :: forall proxy a b. (a -> b) -> proxy a -> b

-- | Converts a constant function to one that takes a <tt>Proxy#</tt>
--   argument. This function is only available with <tt>base-4.7</tt> or
--   later.
--   
--   <i>Since: 0.2</i>
proxyHashed :: forall a b. (a -> b) -> Proxy# a -> b

-- | Converts a constant function that takes a <a>Proxy</a> argument to one
--   that doesn't require a <tt>proxy</tt> argument. (I'm not sure why
--   you'd want this, but it's here for symmetry.)
--   
--   <i>Since: 0.1</i>
unproxied :: forall a b. (Proxy a -> b) -> a -> b

-- | <pre>
--   <a>bitSizeProxied</a> = <a>proxied</a> <a>bitSize</a>
--   </pre>
--   
--   <i>Since: 0.1</i>
bitSizeProxied :: forall proxy a. Bits a => proxy a -> Int

-- | <pre>
--   <a>isSignedProxied</a> = <a>proxied</a> <a>isSigned</a>
--   </pre>
--   
--   <i>Since: 0.1</i>
isSignedProxied :: forall proxy a. Bits a => proxy a -> Bool

-- | <pre>
--   <a>bitSizeMaybeProxied</a> = <a>proxied</a> <a>bitSizeMaybe</a>
--   </pre>
--   
--   This function is only available with <tt>base-4.7</tt> or later.
--   
--   <i>Since: 0.1</i>
bitSizeMaybeProxied :: forall proxy a. Bits a => proxy a -> Maybe Int

-- | <pre>
--   <a>finiteBitSizeProxied</a> = <a>proxied</a> <a>finiteBitSize</a>
--   </pre>
--   
--   This function is only available with <tt>base-4.7</tt> or later.
--   
--   <i>Since: 0.1</i>
finiteBitSizeProxied :: forall proxy a. FiniteBits a => proxy a -> Int

-- | <pre>
--   <a>dataTypeOfProxied</a> = <a>proxied</a> <a>dataTypeOf</a>
--   </pre>
--   
--   <i>Since: 0.1</i>
dataTypeOfProxied :: forall proxy a. Data a => proxy a -> DataType

-- | <pre>
--   <a>typeOfProxied</a> = <a>proxied</a> <a>typeOf</a>
--   </pre>
--   
--   On <tt>base-4.7</tt> and later, this is identical to <a>typeRep</a>.
--   
--   <i>Since: 0.1</i>
typeOfProxied :: forall proxy (a :: k). Typeable a => proxy a -> TypeRep

-- | <pre>
--   <a>sizeOfProxied</a> = <a>proxied</a> <a>sizeOf</a>
--   </pre>
--   
--   <i>Since: 0.1</i>
sizeOfProxied :: forall proxy a. Storable a => proxy a -> Int

-- | <pre>
--   <a>alignmentProxied</a> = <a>proxied</a> <a>alignment</a>
--   </pre>
--   
--   <i>Since: 0.1</i>
alignmentProxied :: forall proxy a. Storable a => proxy a -> Int

-- | <pre>
--   <a>datatypeNameProxied</a> = <a>proxied</a> <a>datatypeName</a>
--   </pre>
--   
--   <i>Since: 0.1</i>
datatypeNameProxied :: forall proxy (t :: k1 -> (k2 -> *) -> k2 -> *) d f a. Datatype d => proxy ((t :: k1 -> (k2 -> *) -> k2 -> *) d f a) -> [Char]

-- | <pre>
--   <a>moduleNameProxied</a> = <a>proxied</a> <a>moduleName</a>
--   </pre>
--   
--   <i>Since: 0.1</i>
moduleNameProxied :: forall proxy (t :: k1 -> (k2 -> *) -> k2 -> *) d f a. Datatype d => proxy ((t :: k1 -> (k2 -> *) -> k2 -> *) d f a) -> [Char]

-- | <pre>
--   <a>isNewtypeProxied</a> = <a>proxied</a> <a>isNewtype</a>
--   </pre>
--   
--   This function is only available with <tt>base-4.7</tt> or later.
--   
--   <i>Since: 0.1</i>
isNewtypeProxied :: forall proxy (t :: k1 -> (k2 -> *) -> k2 -> *) d f a. Datatype d => proxy ((t :: k1 -> (k2 -> *) -> k2 -> *) d f a) -> Bool

-- | <pre>
--   <a>packageNameProxied</a> = <a>proxied</a> <a>packageName</a>
--   </pre>
--   
--   This function is only avaiable with <tt>base-4.9</tt> or later.
--   
--   <i>Since: 0.1</i>
packageNameProxied :: forall proxy (t :: k1 -> (k2 -> *) -> k2 -> *) d f a. Datatype d => proxy ((t :: k1 -> (k2 -> *) -> k2 -> *) d f a) -> [Char]

-- | <pre>
--   <a>conNameProxied</a> = <a>proxied</a> <a>conName</a>
--   </pre>
--   
--   <i>Since: 0.1</i>
conNameProxied :: forall proxy (t :: k1 -> (k2 -> *) -> k2 -> *) c f a. Constructor c => proxy ((t :: k1 -> (k2 -> *) -> k2 -> *) c f a) -> [Char]

-- | <pre>
--   <a>conFixityProxied</a> = <a>proxied</a> <a>conFixity</a>
--   </pre>
--   
--   <i>Since: 0.1</i>
conFixityProxied :: forall proxy (t :: k1 -> (k2 -> *) -> k2 -> *) c f a. Constructor c => proxy ((t :: k1 -> (k2 -> *) -> k2 -> *) c f a) -> Fixity

-- | <pre>
--   <a>conIsRecordProxied</a> = <a>proxied</a> <a>conIsRecord</a>
--   </pre>
--   
--   <i>Since: 0.1</i>
conIsRecordProxied :: forall proxy (t :: k1 -> (k2 -> *) -> k2 -> *) c f a. Constructor c => proxy ((t :: k1 -> (k2 -> *) -> k2 -> *) c f a) -> Bool

-- | <pre>
--   <a>selNameProxied</a> = <a>proxied</a> <a>selName</a>
--   </pre>
--   
--   <i>Since: 0.1</i>
selNameProxied :: forall proxy (t :: k1 -> (k2 -> *) -> k2 -> *) s f a. Selector s => proxy ((t :: k1 -> (k2 -> *) -> k2 -> *) s f a) -> [Char]

-- | <pre>
--   <a>selSourceUnpackednessProxied</a> = <a>proxied</a> <a>selSourceUnpackedness</a>
--   </pre>
--   
--   This function is only available with <tt>base-4.9</tt> or later.
--   
--   <i>Since: 0.1</i>
selSourceUnpackednessProxied :: forall proxy (t :: k1 -> (k2 -> *) -> k2 -> *) s f a. Selector s => proxy ((t :: k1 -> (k2 -> *) -> k2 -> *) s f a) -> SourceUnpackedness

-- | <pre>
--   <a>selSourceStrictnessProxied</a> = <a>proxied</a> <a>selSourceStrictness</a>
--   </pre>
--   
--   This function is only available with <tt>base-4.9</tt> or later.
--   
--   <i>Since: 0.1</i>
selSourceStrictnessProxied :: forall proxy (t :: k1 -> (k2 -> *) -> k2 -> *) s f a. Selector s => proxy ((t :: k1 -> (k2 -> *) -> k2 -> *) s f a) -> SourceStrictness

-- | <pre>
--   <a>selDecidedStrictnessProxied</a> = <a>proxied</a> <a>selDecidedStrictness</a>
--   </pre>
--   
--   This function is only available with <tt>base-4.9</tt> or later.
--   
--   <i>Since: 0.1</i>
selDecidedStrictnessProxied :: forall proxy (t :: k1 -> (k2 -> *) -> k2 -> *) s f a. Selector s => proxy ((t :: k1 -> (k2 -> *) -> k2 -> *) s f a) -> DecidedStrictness

-- | <pre>
--   <a>floatRadixProxied</a> = <a>proxied</a> <a>floatRadix</a>
--   </pre>
--   
--   <i>Since: 0.1</i>
floatRadixProxied :: forall proxy a. RealFloat a => proxy a -> Integer

-- | <pre>
--   <a>floatDigitsProxied</a> = <a>proxied</a> <a>floatDigits</a>
--   </pre>
--   
--   <i>Since: 0.1</i>
floatDigitsProxied :: forall proxy a. RealFloat a => proxy a -> Int

-- | <pre>
--   <a>floatRangeProxied</a> = <a>proxied</a> <a>floatRange</a>
--   </pre>
--   
--   <i>Since: 0.1</i>
floatRangeProxied :: forall proxy a. RealFloat a => proxy a -> (Int, Int)

-- | <pre>
--   <a>parseFormatProxied</a> = <a>proxied</a> <a>parseFormat</a>
--   </pre>
--   
--   This function is only available with <tt>base-4.7</tt> or later.
--   
--   <i>Since: 0.1</i>
parseFormatProxied :: forall proxy a. PrintfArg a => proxy a -> ModifierParser


-- | Remove the <a>Proxy</a>, <a>Proxy#</a>, and <a>undefined</a> arguments
--   from functions with <a>proxyless</a>, <a>proxyHashless</a>, and
--   <a>undefinedless</a>, respectively, which produce functions that take
--   type information via GHC's <tt>-XTypeApplications</tt> extension.
--   
--   This module is only available with GHC 8.0 or later.
--   
--   <i>Since: 0.2</i>
module Data.Proxyless

-- | Converts a constant function that takes a <a>Proxy</a> argument to one
--   that doesn't require an argument.
--   
--   <i>Since: 0.2</i>
proxyless :: forall k (a :: k) b. (Proxy a -> b) -> b

-- | Converts a constant function that takes a <a>Proxy#</a> argument to
--   one that doesn't require an argument.
--   
--   <i>Since: 0.2</i>
proxyHashless :: forall k (a :: k) b. (Proxy# a -> b) -> b

-- | Converts a constant function that takes an <a>undefined</a> argument
--   to one that doesn't require an argument.
--   
--   <i>Since: 0.2</i>
undefinedless :: forall a b. (a -> b) -> b

-- | <pre>
--   <a>theBitSize</a> = <a>undefinedless</a> <a>bitSize</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theBitSize :: forall a. Bits a => Int

-- | <pre>
--   <a>theIsSigned</a> = <a>undefinedless</a> <a>isSigned</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theIsSigned :: forall a. Bits a => Bool

-- | <pre>
--   <a>theBitSizeMaybe</a> = <a>undefinedless</a> <a>bitSizeMaybe</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theBitSizeMaybe :: forall a. Bits a => Maybe Int

-- | <pre>
--   <a>theFiniteBitSize</a> = <a>undefinedless</a> <a>finiteBitSize</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theFiniteBitSize :: forall a. FiniteBits a => Int

-- | <pre>
--   <a>theDataTypeOf</a> = <a>undefinedless</a> <a>dataTypeOf</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theDataTypeOf :: forall a. Data a => DataType

-- | <pre>
--   <a>theTypeNatTypeRep</a> = <a>proxyHashless</a> <tt>typeNatTypeRep</tt>
--   </pre>
--   
--   Note that in <tt>base-4.10</tt> and later, <a>theTypeNatTypeRep</a> is
--   simply a synonym for <a>theTypeRep</a>, as <tt>typeNatTypeRep</tt> is
--   no longer exported.
--   
--   <i>Since: 0.2</i>
theTypeNatTypeRep :: forall a. KnownNat a => TypeRep

-- | <pre>
--   <a>theTypeRep</a> = <a>proxyless</a> <a>typeRep</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theTypeRep :: forall k (a :: k). Typeable a => TypeRep

-- | <pre>
--   <a>theTypeRep#</a> = <a>proxyHashless</a> <tt>typeRep#</tt>
--   </pre>
--   
--   Note that in <tt>base-4.10</tt> and later, <a>theTypeRep#</a> is
--   simply a synonym for <a>theTypeRep</a>, as <tt>typeRep#</tt> is no
--   longer exported.
--   
--   <i>Since: 0.2</i>
theTypeRep# :: forall k (a :: k). Typeable a => TypeRep

-- | <pre>
--   <a>theTypeSymbolTypeRep</a> = <a>proxyHashless</a> <tt>typeSymbolTypeRep</tt>
--   </pre>
--   
--   Note that in <tt>base-4.10</tt> and later, <a>theTypeSymbolTypeRep</a>
--   is simply a synonym for <a>theTypeRep</a>, as
--   <tt>typeSymbolTypeRep</tt> is no longer exported.
--   
--   <i>Since: 0.2</i>
theTypeSymbolTypeRep :: forall a. KnownSymbol a => TypeRep

-- | <pre>
--   <a>theSizeOf</a> = <a>undefinedless</a> <a>sizeOf</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theSizeOf :: forall a. Storable a => Int

-- | <pre>
--   <a>theAlignment</a> = <a>undefinedless</a> <a>alignment</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theAlignment :: forall a. Storable a => Int

-- | <pre>
--   <a>theDatatypeName</a> = <a>datatypeName</a> <a>undefined</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theDatatypeName :: forall k (d :: k). Datatype d => [Char]

-- | <pre>
--   <a>theModuleName</a> = <a>moduleName</a> <a>undefined</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theModuleName :: forall k (d :: k). Datatype d => [Char]

-- | <pre>
--   <a>theIsNewtype</a> = <a>isNewtype</a> <a>undefined</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theIsNewtype :: forall k (d :: k). Datatype d => Bool

-- | <pre>
--   <a>thePackageName</a> = <a>packageName</a> <a>undefined</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
thePackageName :: forall k (d :: k). Datatype d => [Char]

-- | <pre>
--   <a>theConName</a> = <a>conName</a> <a>undefined</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theConName :: forall k (c :: k). Constructor c => [Char]

-- | <pre>
--   <a>theConFixity</a> = <a>conFixity</a> <a>undefined</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theConFixity :: forall k (c :: k). Constructor c => Fixity

-- | <pre>
--   <a>theConIsRecord</a> = <a>conIsRecord</a> <a>undefined</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theConIsRecord :: forall k (c :: k). Constructor c => Bool

-- | <pre>
--   <a>theSelName</a> = <a>selName</a> <a>undefined</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theSelName :: forall k (s :: k). Selector s => [Char]

-- | <pre>
--   <a>theSelSourceUnpackedness</a> = <a>selSourceUnpackedness</a> <a>undefined</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theSelSourceUnpackedness :: forall k (s :: k). Selector s => SourceUnpackedness

-- | <pre>
--   <a>theSelSourceStrictness</a> = <a>selSourceStrictness</a> <a>undefined</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theSelSourceStrictness :: forall k (s :: k). Selector s => SourceStrictness

-- | <pre>
--   <a>theSelDecidedStrictness</a> = <a>selDecidedStrictness</a> <a>undefined</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theSelDecidedStrictness :: forall k (s :: k). Selector s => DecidedStrictness

-- | In <tt>base-4.10</tt> and later, this is simply a synonym for
--   <a>fromLabel</a>. In <tt>base-4.9</tt>, <a>theFromLabel</a> is defined
--   as:
--   
--   <pre>
--   <a>theFromLabel</a> = <a>proxyHashless</a> <a>fromLabel</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theFromLabel :: forall x a. IsLabel x a => a

-- | <pre>
--   <a>theNatVal</a> = <a>proxyless</a> <a>natVal</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theNatVal :: forall n. KnownNat n => Integer

-- | <pre>
--   <a>theNatVal'</a> = <a>proxyHashless</a> <a>natVal'</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theNatVal' :: forall n. KnownNat n => Integer

-- | <pre>
--   <a>theSameNat</a> = <a>sameNat</a> <a>Proxy</a> <a>Proxy</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theSameNat :: forall a b. (KnownNat a, KnownNat b) => Maybe (a :~: b)

-- | <pre>
--   <a>theSameSymbol</a> = <a>sameSymbol</a> <a>Proxy</a> <a>Proxy</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theSameSymbol :: forall a b. (KnownSymbol a, KnownSymbol b) => Maybe (a :~: b)

-- | <pre>
--   <a>theSomeNat</a> = <a>proxyless</a> <a>SomeNat</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theSomeNat :: forall n. KnownNat n => SomeNat

-- | <pre>
--   <a>theSomeSymbol</a> = <a>proxyless</a> <a>SomeSymbol</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theSomeSymbol :: forall n. KnownSymbol n => SomeSymbol

-- | <pre>
--   <a>theSymbolVal</a> = <a>proxyless</a> <a>symbolVal</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theSymbolVal :: forall n. KnownSymbol n => String

-- | <pre>
--   <a>theSymbolVal'</a> = <a>proxyHashless</a> <a>symbolVal'</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theSymbolVal' :: forall n. KnownSymbol n => String

-- | <pre>
--   <a>theFloatRadix</a> = <a>undefinedless</a> <a>floatRadix</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theFloatRadix :: forall a. RealFloat a => Integer

-- | <pre>
--   <a>theFloatDigits</a> = <a>undefinedless</a> <a>floatDigits</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theFloatDigits :: forall a. RealFloat a => Int

-- | <pre>
--   <a>theFloatRange</a> = <a>undefinedless</a> <a>floatRange</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theFloatRange :: forall a. RealFloat a => (Int, Int)

-- | <pre>
--   <a>theParseFormat</a> = <a>undefinedless</a> <a>parseFormat</a>
--   </pre>
--   
--   <i>Since: 0.2</i>
theParseFormat :: forall a. PrintfArg a => ModifierParser
