hakaru-0.6.0: A probabilistic programming language

CopyrightCopyright (c) 2016 the Hakaru team
LicenseBSD3
Maintainerwren@community.haskell.org
Stabilityexperimental
PortabilityGHC-only
Safe HaskellNone
LanguageHaskell2010

Language.Hakaru.Types.Sing

Contents

Description

Singleton types for the Hakaru kind, and a decision procedure for Hakaru type-equality.

Synopsis

Documentation

data family Sing (a :: k) :: * infixr 7 `SEt`infixr 6 `SPlus`infixr 0 `SFun` Source #

The data families of singletons for each kind.

Instances
JmEq1 (Sing :: Symbol -> *) Source # 
Instance details

Methods

jmEq1 :: Sing i -> Sing j -> Maybe (TypeEq i j) Source #

JmEq1 (Sing :: HakaruCon -> *) Source # 
Instance details

Methods

jmEq1 :: Sing i -> Sing j -> Maybe (TypeEq i j) Source #

JmEq1 (Sing :: HakaruFun -> *) Source # 
Instance details

Methods

jmEq1 :: Sing i -> Sing j -> Maybe (TypeEq i j) Source #

JmEq1 (Sing :: Hakaru -> *) Source # 
Instance details

Methods

jmEq1 :: Sing i -> Sing j -> Maybe (TypeEq i j) Source #

JmEq1 (Sing :: Untyped -> *) Source # 
Instance details

Methods

jmEq1 :: Sing i -> Sing j -> Maybe (TypeEq i j) Source #

Eq1 (Sing :: Symbol -> *) Source # 
Instance details

Methods

eq1 :: Sing i -> Sing i -> Bool Source #

Eq1 (Sing :: HakaruCon -> *) Source # 
Instance details

Methods

eq1 :: Sing i -> Sing i -> Bool Source #

Eq1 (Sing :: HakaruFun -> *) Source # 
Instance details

Methods

eq1 :: Sing i -> Sing i -> Bool Source #

Eq1 (Sing :: Hakaru -> *) Source # 
Instance details

Methods

eq1 :: Sing i -> Sing i -> Bool Source #

Eq1 (Sing :: Untyped -> *) Source # 
Instance details

Methods

eq1 :: Sing i -> Sing i -> Bool Source #

Show1 (Sing :: Symbol -> *) Source # 
Instance details

Methods

showsPrec1 :: Int -> Sing i -> ShowS Source #

show1 :: Sing i -> String Source #

Show1 (Sing :: HakaruCon -> *) Source # 
Instance details

Methods

showsPrec1 :: Int -> Sing i -> ShowS Source #

show1 :: Sing i -> String Source #

Show1 (Sing :: HakaruFun -> *) Source # 
Instance details

Methods

showsPrec1 :: Int -> Sing i -> ShowS Source #

show1 :: Sing i -> String Source #

Show1 (Sing :: Hakaru -> *) Source # 
Instance details

Methods

showsPrec1 :: Int -> Sing i -> ShowS Source #

show1 :: Sing i -> String Source #

Show1 (Sing :: Untyped -> *) Source # 
Instance details

Methods

showsPrec1 :: Int -> Sing i -> ShowS Source #

show1 :: Sing i -> String Source #

Coerce (Sing :: Hakaru -> *) Source # 
Instance details

Methods

coerceTo :: Coercion a b -> Sing a -> Sing b Source #

coerceFrom :: Coercion a b -> Sing b -> Sing a Source #

PrimCoerce (Sing :: Hakaru -> *) Source # 
Instance details
JmEq1 (Sing :: [[HakaruFun]] -> *) Source # 
Instance details

Methods

jmEq1 :: Sing i -> Sing j -> Maybe (TypeEq i j) Source #

JmEq1 (Sing :: [HakaruFun] -> *) Source # 
Instance details

Methods

jmEq1 :: Sing i -> Sing j -> Maybe (TypeEq i j) Source #

Eq1 (Sing :: [[HakaruFun]] -> *) Source # 
Instance details

Methods

eq1 :: Sing i -> Sing i -> Bool Source #

Eq1 (Sing :: [HakaruFun] -> *) Source # 
Instance details

Methods

eq1 :: Sing i -> Sing i -> Bool Source #

Show1 (Sing :: [[HakaruFun]] -> *) Source # 
Instance details

Methods

showsPrec1 :: Int -> Sing i -> ShowS Source #

show1 :: Sing i -> String Source #

Show1 (Sing :: [HakaruFun] -> *) Source # 
Instance details

Methods

showsPrec1 :: Int -> Sing i -> ShowS Source #

show1 :: Sing i -> String Source #

Eq (Sing a) Source # 
Instance details

Methods

(==) :: Sing a -> Sing a -> Bool #

(/=) :: Sing a -> Sing a -> Bool #

Eq (Sing a) Source # 
Instance details

Methods

(==) :: Sing a -> Sing a -> Bool #

(/=) :: Sing a -> Sing a -> Bool #

Eq (Sing s) Source # 
Instance details

Methods

(==) :: Sing s -> Sing s -> Bool #

(/=) :: Sing s -> Sing s -> Bool #

Eq (Sing a) Source # 
Instance details

Methods

(==) :: Sing a -> Sing a -> Bool #

(/=) :: Sing a -> Sing a -> Bool #

Eq (Sing a) Source # 
Instance details

Methods

(==) :: Sing a -> Sing a -> Bool #

(/=) :: Sing a -> Sing a -> Bool #

Eq (Sing a) Source # 
Instance details

Methods

(==) :: Sing a -> Sing a -> Bool #

(/=) :: Sing a -> Sing a -> Bool #

Eq (Sing a) # 
Instance details

Methods

(==) :: Sing a -> Sing a -> Bool #

(/=) :: Sing a -> Sing a -> Bool #

Show (Sing a) Source # 
Instance details

Methods

showsPrec :: Int -> Sing a -> ShowS #

show :: Sing a -> String #

showList :: [Sing a] -> ShowS #

Show (Sing a) Source # 
Instance details

Methods

showsPrec :: Int -> Sing a -> ShowS #

show :: Sing a -> String #

showList :: [Sing a] -> ShowS #

Show (Sing s) Source # 
Instance details

Methods

showsPrec :: Int -> Sing s -> ShowS #

show :: Sing s -> String #

showList :: [Sing s] -> ShowS #

Show (Sing a) Source # 
Instance details

Methods

showsPrec :: Int -> Sing a -> ShowS #

show :: Sing a -> String #

showList :: [Sing a] -> ShowS #

Show (Sing a) Source # 
Instance details

Methods

showsPrec :: Int -> Sing a -> ShowS #

show :: Sing a -> String #

showList :: [Sing a] -> ShowS #

Show (Sing a) Source # 
Instance details

Methods

showsPrec :: Int -> Sing a -> ShowS #

show :: Sing a -> String #

showList :: [Sing a] -> ShowS #

Show (Sing a) # 
Instance details

Methods

showsPrec :: Int -> Sing a -> ShowS #

show :: Sing a -> String #

showList :: [Sing a] -> ShowS #

TCMTypeRepr (Sing x) Source # 
Instance details
data Sing (s :: Symbol) Source #

N.B., in order to bring the KnownSymbol dictionary into scope, you need to pattern match on the SingSymbol constructor (similar to when we need to match on Refl explicitly). In general you'll want to do this with an at-pattern so that you can also have a variable name for passing the value around (e.g. to be used as an argument to symbolVal).

Instance details
data Sing (s :: Symbol) where
data Sing (a :: HakaruCon) Source # 
Instance details
data Sing (a :: HakaruCon) where
data Sing (a :: HakaruFun) Source # 
Instance details
data Sing (a :: HakaruFun) where
data Sing (a :: Hakaru) Source #

Singleton types for the kind of Hakaru types. We need to use this instead of Proxy in order to implement jmEq1.

Instance details
data Sing (a :: Untyped) Source # 
Instance details
data Sing (a :: Untyped) where
data Sing (a :: [[HakaruFun]]) Source # 
Instance details
data Sing (a :: [[HakaruFun]]) where
data Sing (a :: [HakaruFun]) Source # 
Instance details
data Sing (a :: [HakaruFun]) where

class SingI (a :: k) where Source #

A class for automatically generating the singleton for a given Hakaru type.

Minimal complete definition

sing

Methods

sing :: Sing a Source #

Instances
KnownSymbol s => SingI (s :: Symbol) Source # 
Instance details

Methods

sing :: Sing s Source #

SingI I Source # 
Instance details

Methods

sing :: Sing I Source #

SingI HNat Source # 
Instance details

Methods

sing :: Sing HNat Source #

SingI HInt Source # 
Instance details

Methods

sing :: Sing HInt Source #

SingI HProb Source # 
Instance details

Methods

sing :: Sing HProb Source #

SingI HReal Source # 
Instance details

Methods

sing :: Sing HReal Source #

SingI U Source # 
Instance details

Methods

sing :: Sing U Source #

KnownSymbol s => SingI (TyCon s :: HakaruCon) Source # 
Instance details

Methods

sing :: Sing (TyCon s) Source #

SingI a => SingI (K a :: HakaruFun) Source # 
Instance details

Methods

sing :: Sing (K a) Source #

SingI a => SingI (HMeasure a :: Hakaru) Source # 
Instance details

Methods

sing :: Sing (HMeasure a) Source #

SingI a => SingI (HArray a :: Hakaru) Source # 
Instance details

Methods

sing :: Sing (HArray a) Source #

(SingI a, SingI b) => SingI (a :@ b :: HakaruCon) Source # 
Instance details

Methods

sing :: Sing (a :@ b) Source #

(SingI a, SingI b) => SingI (a :-> b :: Hakaru) Source # 
Instance details

Methods

sing :: Sing (a :-> b) Source #

(sop ~ Code t, SingI t, SingI sop) => SingI (HData t sop :: Hakaru) Source # 
Instance details

Methods

sing :: Sing (HData t sop) Source #

SingI ([] :: [[HakaruFun]]) Source # 
Instance details

Methods

sing :: Sing [] Source #

SingI ([] :: [HakaruFun]) Source # 
Instance details

Methods

sing :: Sing [] Source #

(SingI xs, SingI xss) => SingI (xs ': xss :: [[HakaruFun]]) Source # 
Instance details

Methods

sing :: Sing (xs ': xss) Source #

(SingI x, SingI xs) => SingI (x ': xs :: [HakaruFun]) Source # 
Instance details

Methods

sing :: Sing (x ': xs) Source #

singOf :: SingI a => proxy a -> Sing a Source #

Some helpful shorthands for "built-in" datatypes

Constructing singletons

sPair :: Sing a -> Sing b -> Sing (HPair a b) Source #

sEither :: Sing a -> Sing b -> Sing (HEither a b) Source #

sList :: Sing a -> Sing (HList a) Source #

Destructing singletons

sUnPair :: Sing (HPair a b) -> (Sing a, Sing b) Source #

sUnPair' :: Sing (x :: Hakaru) -> (forall (a :: Hakaru) (b :: Hakaru). (TypeEq x (HPair a b), Sing a, Sing b) -> r) -> Maybe r Source #

sUnEither :: Sing (HEither a b) -> (Sing a, Sing b) Source #

sUnEither' :: Sing (x :: Hakaru) -> (forall (a :: Hakaru) (b :: Hakaru). (TypeEq x (HEither a b), Sing a, Sing b) -> r) -> Maybe r Source #

sUnFun :: Sing (a :-> b) -> (Sing a, Sing b) Source #

Singletons for Symbol

someSSymbol :: String -> (forall s. Sing (s :: Symbol) -> k) -> k Source #

ssymbolVal :: forall s. Sing (s :: Symbol) -> String Source #