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


-- | Guide type inference with proxy values
--   
--   This package provides <a>Proxy</a> values for various types from the
--   <tt>base</tt> library and functions to use these values as hints for
--   type inference.
@package type-hint
@version 0.1


-- | This module provides <a>Proxy</a> values for various types from the
--   <tt>base</tt> library and functions to use these values as hints for
--   type inference.
module Type.Hint

-- | Hint the type system about the type.
hintType :: α -> p α -> α
infixl 1 `hintType`

-- | Hint the type system about the type constructor.
hintType1 :: f α -> p f -> f α
infixl 1 `hintType1`

-- | Hint the type system about the type argument.
hintTypeArg :: f α -> p α -> f α
infixl 1 `hintTypeArg`

-- | Hint the type system about the two-argument type constructor.
hintType2 :: f α β -> p f -> f α β
infixl 1 `hintType2`

-- | Hint the type system about the first type argument.
hintType2Arg1 :: f α β -> p α -> f α β
infixl 1 `hintType2Arg1`

-- | Hint the type system about the second type argument.
hintType2Arg2 :: f α β -> p β -> f α β
infixl 1 `hintType2Arg2`

-- | Hint the type system about the three-argument type constructor.
hintType3 :: f α β γ -> p f -> f α β γ
infixl 1 `hintType3`

-- | Hint the type system about the first type argument.
hintType3Arg1 :: f α β γ -> p α -> f α β γ
infixl 1 `hintType3Arg1`

-- | Hint the type system about the second type argument.
hintType3Arg2 :: f α β γ -> p β -> f α β γ
infixl 1 `hintType3Arg2`

-- | Hint the type system about the third type argument.
hintType3Arg3 :: f α β γ -> p γ -> f α β γ
infixl 1 `hintType3Arg3`

-- | A concrete, poly-kinded proxy type
data Proxy k (t :: k) :: forall k. k -> *
Proxy :: Proxy k

-- | <i>()</i> proxy value.
aUnit :: Proxy ()

-- | <a>Char</a> proxy value.
aChar :: Proxy Char

-- | <a>Integer</a> proxy value.
anInteger :: Proxy Integer

-- | <a>Int</a> proxy value.
anInt :: Proxy Int

-- | <a>Int8</a> proxy value.
anInt8 :: Proxy Int8

-- | <a>Int16</a> proxy value.
anInt16 :: Proxy Int16

-- | <a>Int32</a> proxy value.
anInt32 :: Proxy Int32

-- | <a>Int64</a> proxy value.
anInt64 :: Proxy Int64

-- | <a>Word</a> proxy value.
aWord :: Proxy Word

-- | <a>Word8</a> proxy value.
aWord8 :: Proxy Word8

-- | <a>Word16</a> proxy value.
aWord16 :: Proxy Word16

-- | <a>Word32</a> proxy value.
aWord32 :: Proxy Word32

-- | <a>Word64</a> proxy value.
aWord64 :: Proxy Word64

-- | <a>Ratio</a> proxy value.
aRatio :: Proxy Ratio

-- | <a>Ratio</a> <i>α</i> proxy value.
aRatioOf :: Proxy α -> Proxy (Ratio α)

-- | <a>Rational</a> proxy value.
aRational :: Proxy Rational

-- | <a>Fixed</a> proxy value.
aFixed :: Proxy Fixed

-- | <a>Fixed</a> <i>α</i> proxy value.
aFixedOf :: Proxy α -> Proxy (Fixed α)

-- | <a>Uni</a> proxy value.
aUni :: Proxy Uni

-- | <a>Deci</a> proxy value.
aDeci :: Proxy Deci

-- | <a>Centi</a> proxy value.
aCenti :: Proxy Centi

-- | <a>Milli</a> proxy value.
aMilli :: Proxy Milli

-- | <a>Micro</a> proxy value.
aMicro :: Proxy Micro

-- | <a>Nano</a> proxy value.
aNano :: Proxy Nano

-- | <a>Pico</a> proxy value.
aPico :: Proxy Pico

-- | <a>Float</a> proxy value.
aFloat :: Proxy Float

-- | <a>Double</a> proxy value.
aDouble :: Proxy Double

-- | <a>Maybe</a> proxy value.
aMaybe :: Proxy Maybe

-- | <a>Maybe</a> <i>α</i> proxy value.
aMaybeOf :: Proxy α -> Proxy (Maybe α)

-- | Pair proxy value.
aPair :: Proxy (,)

-- | <tt>(<i>α</i>, <i>β</i>)</tt> proxy value.
aPairOf :: Proxy α -> Proxy β -> Proxy (α, β)

-- | Triple proxy value.
aTriple :: Proxy (,,)

-- | <tt>(<i>α</i>, <i>β</i>, <i>γ</i>)</tt> proxy value.
aTripleOf :: Proxy α -> Proxy β -> Proxy γ -> Proxy (α, β, γ)

-- | <a>Either</a> proxy value.
anEither :: Proxy Either

-- | <a>Either</a> <i>α</i> <i>β</i> proxy value.
anEitherOf :: Proxy α -> Proxy β -> Proxy (Either α β)

-- | List proxy value.
aList :: Proxy []

-- | List of <i>α</i> proxy value.
aListOf :: Proxy α -> Proxy ([α])

-- | <a>IO</a> proxy value.
anIo :: Proxy IO

-- | <a>IO</a> <i>α</i> proxy value.
anIoOf :: Proxy α -> Proxy (IO α)

-- | <a>IORef</a> proxy value.
anIoRef :: Proxy IORef

-- | <a>IORef</a> <i>α</i> proxy value.
anIoRefOf :: Proxy α -> Proxy (IORef α)

-- | <a>ST</a> proxy value.
anSt :: Proxy ST

-- | <a>ST</a> <i>α</i> proxy value.
anStOf :: Proxy α -> Proxy (ST α)

-- | <a>STRef</a> proxy value.
anStRef :: Proxy STRef

-- | <a>STRef</a> <i>α</i> proxy value.
anStRefOf :: Proxy α -> Proxy (STRef α)
