hakaru-0.3.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) :: * Source #

The data families of singletons for each kind.

Instances

JmEq1 Symbol (Sing Symbol) Source # 

Methods

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

JmEq1 HakaruCon (Sing HakaruCon) Source # 

Methods

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

JmEq1 HakaruFun (Sing HakaruFun) Source # 

Methods

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

JmEq1 Hakaru (Sing Hakaru) Source # 

Methods

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

JmEq1 Untyped (Sing Untyped) Source # 

Methods

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

Eq1 Symbol (Sing Symbol) Source # 

Methods

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

Eq1 HakaruCon (Sing HakaruCon) Source # 

Methods

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

Eq1 HakaruFun (Sing HakaruFun) Source # 

Methods

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

Eq1 Hakaru (Sing Hakaru) Source # 

Methods

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

Eq1 Untyped (Sing Untyped) Source # 

Methods

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

Show1 Symbol (Sing Symbol) Source # 

Methods

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

show1 :: a i -> String Source #

Show1 HakaruCon (Sing HakaruCon) Source # 

Methods

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

show1 :: a i -> String Source #

Show1 HakaruFun (Sing HakaruFun) Source # 

Methods

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

show1 :: a i -> String Source #

Show1 Hakaru (Sing Hakaru) Source # 

Methods

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

show1 :: a i -> String Source #

Show1 Untyped (Sing Untyped) Source # 

Methods

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

show1 :: a i -> String Source #

Coerce (Sing Hakaru) Source # 
PrimCoerce (Sing Hakaru) Source # 
JmEq1 [[HakaruFun]] (Sing [[HakaruFun]]) Source # 

Methods

jmEq1 :: a i -> a j -> Maybe (TypeEq (Sing [[HakaruFun]]) i j) Source #

JmEq1 [HakaruFun] (Sing [HakaruFun]) Source # 

Methods

jmEq1 :: a i -> a j -> Maybe (TypeEq (Sing [HakaruFun]) i j) Source #

Eq1 [[HakaruFun]] (Sing [[HakaruFun]]) Source # 

Methods

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

Eq1 [HakaruFun] (Sing [HakaruFun]) Source # 

Methods

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

Show1 [[HakaruFun]] (Sing [[HakaruFun]]) Source # 

Methods

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

show1 :: a i -> String Source #

Show1 [HakaruFun] (Sing [HakaruFun]) Source # 

Methods

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

show1 :: a i -> String Source #

Eq (Sing [[HakaruFun]] a) Source # 

Methods

(==) :: Sing [[HakaruFun]] a -> Sing [[HakaruFun]] a -> Bool #

(/=) :: Sing [[HakaruFun]] a -> Sing [[HakaruFun]] a -> Bool #

Eq (Sing [HakaruFun] a) Source # 

Methods

(==) :: Sing [HakaruFun] a -> Sing [HakaruFun] a -> Bool #

(/=) :: Sing [HakaruFun] a -> Sing [HakaruFun] a -> Bool #

Eq (Sing Symbol s) Source # 

Methods

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

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

Eq (Sing HakaruCon a) Source # 
Eq (Sing HakaruFun a) Source # 
Eq (Sing Hakaru a) Source # 

Methods

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

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

Eq (Sing Untyped a) # 

Methods

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

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

Show (Sing [[HakaruFun]] a) Source # 

Methods

showsPrec :: Int -> Sing [[HakaruFun]] a -> ShowS #

show :: Sing [[HakaruFun]] a -> String #

showList :: [Sing [[HakaruFun]] a] -> ShowS #

Show (Sing [HakaruFun] a) Source # 

Methods

showsPrec :: Int -> Sing [HakaruFun] a -> ShowS #

show :: Sing [HakaruFun] a -> String #

showList :: [Sing [HakaruFun] a] -> ShowS #

Show (Sing Symbol s) Source # 

Methods

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

show :: Sing Symbol s -> String #

showList :: [Sing Symbol s] -> ShowS #

Show (Sing HakaruCon a) Source # 
Show (Sing HakaruFun a) Source # 
Show (Sing Hakaru a) Source # 

Methods

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

show :: Sing Hakaru a -> String #

showList :: [Sing Hakaru a] -> ShowS #

Show (Sing Untyped a) # 
data Sing 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).

data Sing HakaruCon Source # 
data Sing HakaruFun Source # 
data Sing Hakaru Source #

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

data Sing Untyped Source # 
data Sing Untyped where
data Sing [[HakaruFun]] Source # 
data Sing [[HakaruFun]] where
data Sing [HakaruFun] Source # 
data Sing [HakaruFun] where

class SingI a 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 Symbol s Source # 

Methods

sing :: Sing s a Source #

SingI HakaruFun I Source # 

Methods

sing :: Sing I a Source #

SingI Hakaru HNat Source # 

Methods

sing :: Sing HNat a Source #

SingI Hakaru HInt Source # 

Methods

sing :: Sing HInt a Source #

SingI Hakaru HProb Source # 

Methods

sing :: Sing HProb a Source #

SingI Hakaru HReal Source # 

Methods

sing :: Sing HReal a Source #

SingI Untyped U Source # 

Methods

sing :: Sing U a Source #

KnownSymbol s => SingI HakaruCon (TyCon s) Source # 

Methods

sing :: Sing (TyCon s) a Source #

SingI Hakaru a => SingI HakaruFun (K a) Source # 

Methods

sing :: Sing (K a) a Source #

SingI Hakaru a => SingI Hakaru (HMeasure a) Source # 

Methods

sing :: Sing (HMeasure a) a Source #

SingI Hakaru a => SingI Hakaru (HArray a) Source # 

Methods

sing :: Sing (HArray a) a Source #

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

Methods

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

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

Methods

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

((~) [[HakaruFun]] sop (Code t), SingI HakaruCon t, SingI [[HakaruFun]] sop) => SingI Hakaru (HData t sop) Source # 

Methods

sing :: Sing (HData t sop) a Source #

SingI [[HakaruFun]] ([] [HakaruFun]) Source # 

Methods

sing :: Sing [[HakaruFun]] a Source #

SingI [HakaruFun] ([] HakaruFun) Source # 

Methods

sing :: Sing [HakaruFun] a Source #

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

Methods

sing :: Sing (([HakaruFun] ': xs) xss) a Source #

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

Methods

sing :: Sing ((HakaruFun ': x) xs) 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 #

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

Singletons for Symbol